Bài giảng Lập trình Java - Trần Anh Dũng - Chương 3: Hướng đối tượng trong Java

 Các khái niệm cơbản vềlớp, đối tượng.

 Lớp và đối tượng trong java.

 Tính đóng gói.

 Tính kếthừa.

 Tính đa hình.

 Interface.

pdf50 trang | Chuyên mục: Java | Chia sẻ: dkS00TYs | Lượt xem: 4134 | Lượt tải: 1download
Tóm tắt nội dung Bài giảng Lập trình Java - Trần Anh Dũng - Chương 3: Hướng đối tượng trong Java, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
kể cả hàm tạo
 Trước khối lệnh này ta ñặt từ khoá static, từ khoá này
báo cho java biết ñây là khối khởi ñầu tĩnh, khối này
chỉ ñược gọi 1 lần khi ñối tượng ñầu tiên của lớp này
ñược tạo ra
 Khối khởi ñầu tĩnh này cũng ñược java gọi tự ñộng
trước bất cứ hàm tạo nào, thông thường ta sử dụng
khối khởi ñầu tĩnh ñể khởi ñầu các thuộc tính tĩnh.
Khối khởi ñầu tĩnh
19
 Phương thức khai báo chồng (overloading method)
 Ví dụ:
class Sinhvien{
…
public void xemThongTinSV() {//…}
public void xemThongTinSV(String psMaSv){
//…
}
}
Nạp chồng phương thức
20
 Tham chiếu this: Một biến ẩn tồn tại trong tất cả các lớp, this ñược
sử dụng trong khi chạy và tham khảo ñến bản thân lớp chứa nó.
 Ví dụ: class Sinhvien {
String maSv, tenSv, dcLienlac;
int tuoi;
…
public void xemThongTinSV() {
System.out.println(this.maSv);
System.out.println(this.tenSv);
…
}
}
Tham chiếu this
21
 ðóng gói: Nhóm những gì có liên quan với nhau vào
thành một và có thể sử dụng một tên ñể gọi.
Ví dụ:
 Các phương thức ñóng gói các câu lệnh.
 ðối tượng ñóng gói dữ liệu và các hành vi/phương
thức liên quan.
 ðối tượng = Dữ liệu + Hành vi/Phương thức
Tính ñóng gói (1)
22
 ðóng gói dùng ñể che dấu một phần hoặc tất cả thông
tin, chi tiết cài ñặt bên trong với bên ngoài.
 Ví dụ: khai báo các lớp thuộc cùng gói trong java
package ;
// khai báo trước khi khai báo lớp
class 
{ … }
Tính ñóng gói (2)
23
Creating packages in Java (1)
package mypackage;
public class Palindrome{
public boolean test(String str){
char givenstring[ ];
char reverse[ ] = new char[str.length()];
boolean flag = true;
int count = 0,ctr = 0;
givenstring = str.toCharArray();
for (count = str.length()-1;count >= 0;count--){
reverse[ctr] = givenstring[count];
ctr++;
}
for (count = 0;count < str.length();count++){
if (reverse[count] != givenstring[count])
flag = false;
}
return flag;
}
}
im ort mypackage.*;
class Palintest 
{
public static void main(String[] args) 
{
Palindrome objPalindrome = new Palindrome();
System.out.println(objPalindrome.test(args[0]));
}
}
Output
24
 Thừa hưởng các thuộc tính và phương thức ñã có
 Bổ sung, chi tiết hóa cho phù hợp với mục ñích sử dụng
mới
 Thuộc tính: Thêm mới
 Phương thức: Thêm mới hay hiệu chỉnh
Tính kế thừa (1)
ðối tượng hình học
Hình 2d Hình 3d
Tròn VuôngE-líp Chữ nhật Cầu Lập phương Trụ…
25
 Lớp dẫn xuất/lớp con (SubClass)
 Lớp cơ sở/lớp cha (SuperClass)
 Lớp con có thể kế thừa tất cả hay một phần các thành
phần dữ liệu (thuộc tính), phương thức của lớp cha
(public, protected, default)
 Dùng từ khóa extends.
Ví dụ: class nguoi { …
}
class sinhvien extends nguoi { …
}
Tính kế thừa (2)
26
 Phương thức ñịnh nghĩa lại (Overriding Method)
 ðược ñịnh nghĩa trong lớp con
 Có tên, kiểu trả về & các ñối số giống với phương
thức của lớp cha
 Có kiểu, phạm vi truy cập “lớn hơn” phương thức
trong lớp cha
Tính kế thừa (3)
default protected publicprivate
27
 Ví dụ:
abstract class Hinhhoc { …
public float tinhdientich() {
return 0;
}
…
}
class HinhVuong extends Hinhhoc {
private int canh;
public float tinhdientich() {
return canh*canh;
}
…
}
Tính kế thừa (4)
Chỉ có thể public do phương thức 
tinhdientich() của lớp cha là public
28
class HinhChuNhat extends HinhVuong {
private int cd;
private int cr;
public float tinhdientich() {
return cd*cr;
}
…
}
Tính kế thừa (5)
Chỉ có thể public do phương thức 
tinhdientich() của lớp cha là public
29
Tính ña hình (1)
• Ví dụ:
class A_Object {
// …
void method_1() { // …
}
}
class B_Object extends A_Object {
// …
void method_1() { // …
}
}
 Tính ña hình: việc một
ñối tượng có thể có nhiều
“kiểu” hiện hành khác nhau
ñược gọi là tính ña hình.
30
Tính ña hình (2)
class A{ 
public void method(){
System.out.println(“method of A”); } 
}
class B extends A { 
public void method(){
System.out.println(“method of B”); } 
}
class C extends A { 
public void method(){
System.out.println(“method of C”); } 
}
// Câu lệnh trong main
A a = new A();
a.method(); 
a = new B();
a.method(); 
C c = new C();
a = c;
a.method();
// Kết quả màn hình
method of A
method of B
method of C
31
 Từ khoá static
 ðược dùng với phương thức và biến.
 Biến static?
 Phương thức static?
Nhắc lại từ khóa static (1)
32
 Lớp nội: Là lớp ñược khai báo bên trong 1 lớp khác.
 Ví dụ: public class A {
// …
int 
class B {
// …
int 
public B(int par_1){
field_2 = par_1 + field_1;
}
}
}
Lớp nội (Lớp trong)
33
 Lớp final:
 Lớp không cho phép các lớp khác dẫn xuất từ nó hay
lớp final không thể có lớp con.
 ðịnh nghĩa: từ khóa final
public final class A
{
…
}
Lớp final
34
 Lớp trừu tượng chỉ ñược dùng làm lớp cha cho các lớp
khác, nó không có các thể hiện (instance).
 Lớp trừu tượng ñịnh nghĩa các thuộc tính chung cho các
lớp con của nó.
 Ví dụ có thể thiết kế lớp Hình tròn, Hình vuông... kế thừa
từ lớp trừu tượng Hình. Lớp Hình có thuộc tính là tên
hình, các phương thức tính diện tích, chu vi...
 Lớp trừu tượng (abstract) thường có ít nhất một phương 
thức trừu tượng, là phương thức không có cài ñặt.
 public abstract void draw();
Lớp trừu tượng (1)
35
 Khai báo lớp trừu tượng
 public abstract class ClassName {…}
 Các lớp con của một lớp cha trừu tượng phải cài ñặt tất
cả các phương thức trừu tượng. Nếu không nó cũng sẽ
trở thành lớp trừu tượng.
 Không thể tạo các ñối tượng của một lớp trừu tượng
nhưng có thể khai báo biến thuộc kiểu lớp trừu tượng ñể
tham chiếu ñến các ñối tượng thuộc lớp con của nó.
Lớp trừu tượng (2)
36
Lớp trừu tượng (3)
public abstract class Shape{
static final double PI = 3.14159;
public abstract double getArea();
public abstract double getVolume();
}
class Circle extends Shape{
double radius;
public double getArea() { return PI*radius*radius; }
public double getVolume() { return 0; }
}
class Cube extends Shape{
double a, b, c;
public double getArea() { return 2*(a*b+b*c+c*a); }
public double getVolume() { return a*b*c; }
}
37
 Là một biến tham chiếu ñến ñối tượng có kiểu là lớp cha
của lớp hiện tại.
 Tham chiếu super ñược dùng ñể truy cập ñến các thành
viên của lớp cha ñã bị che bởi lớp con và constructor
của lớp cha.
Tham chiếu super
38
 Interface ñược java ñưa ra với hai mục ñích chính:
 ðể tạo ra lớp cơ sở thuần ảo (không có bất kỳ
phương thức nào ñược cài ñặt)
 Thực hiện hành vi tương tự như kế thừa bội.
 ðể tạo ra một interface, ta dùng từ khoá interface
 ðể triển khai một interface dùng từ khóa implements.
 Nếu một lớp triển khai nhiều interface?
Giao tiếp – interface (1) 
39
Một số chú ý:
 Các trường trong interface là static và final
 Tất cả các thành phần của một giao diện tự ñộng là
public do vậy ta không cần phải thêm bổ từ này vào.
 Ta không ñược phép thêm các bổ từ khác như
private, protected trước các khai báo trong interface.
 Một interface có thể thừa kế một interface khác.
 Một lớp có thể cài ñặt một hay nhiều interface nhưng
chỉ có thể thừa kế (extends) từ một lớp.
Giao tiếp – interface (2) 
40
 Ví dụ: ðịnh nghĩa một interface Shape trong tập tin
shape.java
public interface Shape{
//Tính diện tích
public abstract double area();
//Tính thể tích
public abstract double volume();
//Trả về tên của shape
public abstract String getName();
}
Giao tiếp – interface (3)
41
//Lớp Point cài ñặt/hiện thực interface tên shape.
//ðịnh nghĩa lớp Point trong tập tin Point.java
public class Point extends Object implements Shape {
protected int x, y; //Tọa ñộ x, y của 1 ñiểm
//Constructor không tham số.
public Point() {
setPoint( 0, 0 );
}
//Constructor có tham số.
public Point(int xCoordinate, int yCoordinate) {
setPoint( xCoordinate, yCoordinate );
}
Giao tiếp – interface (4)
42
//Gán tọa ñộ x, y cho 1 ñiểm 
public void setPoint( int xCoordinate, int yCoordinate ) {
x = xCoordinate;
y = yCoordinate;
}
//Lấy tọa ñộ x của 1 ñiểm
public int getX() {
return x;
}
//Lấy tọa ñộ y của 1 ñiểm
public int getY() {
return y;
}
Giao tiếp – interface (5)
43
//Thể hiện tọa ñộ của 1 ñiểm dưới dạng chuỗi
public String toString() {
return "[" + x + ", " + y + "]";
}
//Tính diện tích
public double area() {
return 0.0;
}
//Tính thể tích
public double volume() {
return 0.0;
}
Giao tiếp – interface (6)
44
//Trả về tên của ñối tượng shape
public String getName() {
return "Point";
}
} //End class Point
Giao tiếp – interface (7)
45
Một số chú ý:
 Lớp triển khai interface phải thực thi tất cả các
phương thức ñược khai báo trong interface, nếu như
lớp ñó không triển khai, hoặc triển khai không hết thì
nó phải ñược khai báo là abstract
 Interface cũng là một lớp trừu tượng do vậy ta không
thể tạo thể hiện của interface
 Một interface có thể mở rộng một interface khác,
bằng hình thức kế thừa
Giao tiếp – interface (8) 
46
Phạm vi truy cập 
47
 Java không có toán tử phạm vi (scope) ::
 Java không có hủy tử (destructor), nó chỉ có phương
thức finalize() ñược gọi bởi Garbage Collector.
 Java không có template.
 Java không có quá tải toán tử (operator overloading).
Một số lưu ý 
48
1. Xây dựng lớp Candidate (Thí sinh) gồm các thuộc
tính: mã, tên, ngày tháng năm sinh, ñiểm thi Toán,
Văn, Anh và các phương thức cần thiết.
2. Xây dựng lớp TestCandidate ñể kiểm tra lớp trên:
- Nhập vào n thí sinh (n do người dùng nhập)
- In ra thông tin về các thí sinh có tổng ñiểm lớn hơn
15
Bài tập
49
Bài tập
3. Xét phần mềm quản lý nhân sự. Giả sử Công ty có hai
loại nhân viên: nhân viên văn phòng và nhân viên sản
xuất. Viết chương trình quản lý và tính lương cho từng
nhân viên của công ty:
- Mỗi nhân viên cần quản lý các thông tin sau: Họ tên,
ngày sinh, lương
- Công ty cần tính lương cho nhân viên như sau:
- ðối với nhân viên sản xuất:
- Lương=lương căn bản + số sản phẩm * 5.000
- ðối với nhân viên văn phòng:
- lương = số ngày làm việc * 100.000
50
Hỏi & ñáp

File đính kèm:

  • pdfBài giảng Lập trình Java - Trần Anh Dũng - Chương 3_Hướng đối tượng trong Java.pdf
Tài liệu liên quan