Bài giảng Công nghệ Java - Chương 6: Kế thừa, đóng gói trong Java - Trần Quang Diệu

Package

• Một gói thư viện là tập hợp các lớp, các giao

tiếp, các kiểu liệt kê và các chú thích.

• Nó cung cấp các chức năng bảo vệ truy cập và

quản lý không gian tên

• Thao tác trên gói có 2 kỹ thuật:

– KT đặt tên

– KT điều khiển truy xuất

pdf 52 trang yennguyen 3260
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Công nghệ Java - Chương 6: Kế thừa, đóng gói trong Java - Trần Quang Diệu", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Công nghệ Java - Chương 6: Kế thừa, đóng gói trong Java - Trần Quang Diệu

Bài giảng Công nghệ Java - Chương 6: Kế thừa, đóng gói trong Java - Trần Quang Diệu
CÔNG NGHỆ JAVA
CH6. KẾ THỪA, ĐÓNG GÓI TRONG JAVA
Quang Dieu Tran PhD
4/7/2018 1
Package
4/7/2018  2
Package
• Một gói thư viện là tập hợp các lớp, các giao 
tiếp, các kiểu liệt kê và các chú thích.
• Nó cung cấp các chức năng bảo vệ truy cập và 
quản lý không gian tên
• Thao tác trên gói có 2 kỹ thuật:
– KT đặt tên
– KT điều khiển truy xuất
4/7/2018  3
Package
• Một gói là một nhóm các lớp và 
giao tiếp có quan hệ với nhau 
được tổ chức như 1 đơn vị trong 
không gian tên.
• Gói giúp phân hoạch không gian 
tên lớp, giao diện thành những 
vùng dễ quản lý hơn.
4/7/2018  4
Đặc điểm gói
• Một gói có thể có nhiều gói con
• Không được có hai thành viên trùng tên
• Tên của gói được viết bằng chữ thường
• Java có 2 loại gói:
– Gói được định nghĩa trước
– Gói được định nghĩa bởi người dùng
4/7/2018  5
Định nghĩa gói
• Để tạo 1 gói, ta đặt từ khóa package ngay 
phát biểu đầu tiên của tập tin nguồn.
• Nếu bỏ qua khai báo package lớp sẽ 
được đặt vào gói mặc định.
4/7/2018  6
Các bước định nghĩa gói
• Bước 1: lựa chọn tên gói
– Tên gói phải là chữ thường
– Tên gói không được bắt đầu bằng java
hoặc javax
– Không được bắt đầu bằng số hoặc dấu nối 
(-)
• Bước 2: tạo thư mục cùng tên với gói
– Java sử dụng hệ thống thư mục để lưu trữ 
các gói các lớp được chứa trong thư 
mục cùng tên PackageName.
4/7/2018  7
Các bước định nghĩa gói
• Bước 3: đưa các tập tin nguồn vào 
trong gói
– Thêm câu lệnh package vào dòng 
đầu tiên của mã nguồn.
– Chỉ có duy nhất 1 câu lệnh package
đối với mỗi tệp nguồn.
• Bước 4: biên dịch và chạy ứng 
dụng
– Khi biên dịch phải đảm bảo sử dụng 
tên lớp đầy đủ bao gồm cả tên gói.
– Dùng dấu chấm để phân biệt một 
package với package cha của nó.
4/7/2018  8
Định nghĩa gói
• Java xem gốc của cây phân cấp gọi được định 
nghĩa ở biến môi trường CLASSPATH
• Ví dụ: 
package java.awt.image;
 Được lưu trữ trong thư mục Java\awt\image
với hệ điều hành Windows
4/7/2018  9
Điều khiển truy xuất
• Các quyền truy xuất: 
4/7/2018  10
Sử dụng gói
• Java đưa ra phát biểu import để những lớp 
nào đó hay toàn bộ gói có thể lấy được có 
thể sử dụng lớp trực tiếp qua tên nó mà 
không cần dùng dấu chấm truy xuất.
• Trong tập tin Java, khai báo import sẽ đứng 
liền sau phát biểu package;
4/7/2018  11
Sử dụng gói
• Ví dụ
• Tất cả các gói chuẩn đều nằm trong gói tên là 
java phải nhập tên lớp và gói mà bạn muốn 
sử dụng.
• Riêng gói java.lang có nhiều chức năng 
thông dụng được import ngầm định
• Phát biểu import của gói chỉ có tác dụng 
trên các thành phần public của nó.
4/7/2018  12
Kế thừa - Inheritance
4/7/2018  13
Kế thừa trong thế giới thực
4/7/2018  14
Kế thừa trong thế giới thực
• Quá trình truyền các đặc tính và cách cư xử 
của cha mẹ cho con cái được gọi là kế thừa.
• Mục đích: tránh tạo ra các đặc tính và hành vi 
đã có sẵn mà chỉ sử dụng lại những cái có sẵn 
đó để tạo nên các thực thể mới.
4/7/2018  15
Kế thừa trong lập trình
• Là một phần quan trọng và không thể thiếu 
trong lập trình hướng đối tượng.
• Kế thừa cho phép bạn định nghĩa một lớp 
tổng quát nhất, sau đó định nghĩa thêm các 
lớp mới bằng cách thêm 1 số chi tiết vào lớp 
tổng quát này.
4/7/2018  16
Abstract class
4/7/2018  17
Lớp trừu tượng (abstract class)
• Chúng ta có thể tạo ra các lớp cơ sở để tái sử 
dụng mà không muốn tạo ra đối tượng thực 
của lớp.
– Các lớp Point, Circle, Rectangle chung nhau khái 
niệm cùng là hình vẽ Shape
 Giải pháp là khai báo lớp trừu tượng 
(abstract class)
4/7/2018  18
Lớp trừu tượng (abstract class)
• Lớp trừu tượng dùng 
để tạo ra khung làm 
việc chung.
• Không thể tạo đối 
tượng từ lớp trừu 
tượng.
4/7/2018  19
Ví dụ
4/7/2018  20
Tái sử dụng
• Tồn tại nhiều loại đối tượng có các thuộc tính 
và hành vi tương tự hoặc liên quan đến nhau
– Person, Student, Manager,
• Xuất hiện nhu cầu sử dụng lại các mã nguồn 
đã viết
– Sử dụng lại thông qua copy
– Sử dụng lại thông qua quan hệ has_a
– Sử dụng lại thông qua cơ chế “kế thừa”
4/7/2018  21
Tái sử dụng
• Copy mã nguồn
– Tốn công, dễ nhầm
– Khó sửa lỗi do tồn tại nhiều phiên bản
• Quan hệ has_a
– Sử dụng lớp cũ như là thành phần của lớp mới
– Sử dụng lại cài đặt với giao diện mới
• Phải viết lại giao diện
• Chưa đủ mềm dẻo
4/7/2018  22
Ví dụ: has_a
class Person {
String name;
Date bithday;
public String getName() { return name; }
...
}
class Employee {
Person me; 
double salary;
public String getName() { return me.getName(); }
...
}
4/7/2018  23
Ví dụ: has_a
class Manager {
Employee me;
Employee assistant;
public setAssistant(Employee e) {...}
...
}
...
Manager junior = new Manager();
Manager senior = new Manager();
senior.setAssistant(junior); // error
4/7/2018  24
Kế thừa
• Dựa trên quan hệ is_a
• Thừa hưởng lại các thuộc tính và phương thức 
đã có
• Chi tiết hóa cho phù hợp với mục đích sử 
dụng mới
– Thêm các thuộc tính mới
– Thêm hoặc hiệu chỉnh các phương thức
4/7/2018  25
Lớp con
• Dùng từ khóa extends để tạo ra lớp con.
• Lớp con phải tuân theo 1 số nguyên tắc sau:
– Chỉ được kế thừa trực tiếp từ 1 lớp duy nhất
– Nếu nó không có bất kì lớp cha nào thì ngầm định 
nó kế thừa lớp Object
– Lớp con không được kế thừa hàm dựng của lớp 
cha.
4/7/2018  26
Cài đè (Overriding)
• Khi lớp con có 1 phương thức giống hệt lớp 
cha, ta gọi đó là cài đè.
• Mục đích: định nghĩa mới hay thực hiện hành 
vi khác so với lớp cha.
4/7/2018  27
Cài đè (Overriding)
• Qui tắc:
– Phương thức cài đè phải 
trùng tên, kiểu, số các 
tham số và kiểu trả về 
so với phương thức bị 
cài đè.
– Phương thức bị cài đè 
phải có định danh truy 
cập yếu hơn hoặc bằng 
so với phương thức cài 
đè.
4/7/2018  28
Từ khóa super
• Cho phép lớp con truy cập tới các thành phần 
ở lớp cha.
• super trong constructor dùng để truy xuất 
tới constructor của lớp cha, phải là câu lệnh 
đầu tiên trong hàm dựng.
4/7/2018  29
Nạp chồng phương thức
• Nạp chồng là khả năng lớp có nhiều phương 
thức cùng tên
4/7/2018  30
Nạp chồng: Các tham số khác nhau
• Số các tham số khác 
nhau.
• Kiểu dữ liệu trả về 
giống nhau.
4/7/2018  31
Nạp chồng: Kiểu dữ liệu trả về khác nhau
• Có cùng số tham số
• Khác nhau kiểu dữ 
liệu trả về
4/7/2018  32
Nạp chồng hàm dựng
• Cho phép xây dựng
đối tượng bằng nhiều
cách
4/7/2018  33
Các phương thức trừu tượng
• Phương thức chỉ có khai báo mà không có cài đặt được 
gọi là phương thức trừu tượng.
• Phương thức trừu tượng là phương thức có từ khóa 
abstract
• Phương thức trừu tượng phải được khai báo trong 
abstract class hoặc trong interface
• Phương thức trừu tượng không có cặp dấu ngoặc kép 
({}) và được kết thúc bằng dấu chấm phẩy (;)
4/7/2018  34
Các phương thức trừu tượng
4/7/2018  35
Thuật ngữ
• Kế thừa
• Lớp cơ sở, lớp cha
• Lớp dẫn xuất, lớp con
4/7/2018  36
Kế thừa trong Java
[public] class DerivedClass extends BaseClass { 
/* new features goes here */ 
}
Ví dụ:
class Employee extends Person {
private double salary;
public boolean setSalary(double sal) {
...
salary = sal;
return true;
}
}
4/7/2018  37
Kế thừa trong Java
Employee e = new Employee();
e.setName("John");
e.setSalary(3.0);
Person
-name
-birthday
+setName()
+setBirthday()
Employee
-salary
+setSalary()
+getDetail()
4/7/2018  38
Thừa kế nhiều tầng
Person
-name
-birthday
+setName
+setBirthday
Employee
-salary
+setSalary
+getDetail
Manager
-rank
...
Programmer
-project
...
Student
-id
...
Mọi đối tượng đều
thừa kế từ lớp gốc Object
4/7/2018  39
Interfaces - giao diện
4/7/2018  40
Định nghĩa giao diện
• Bạn có thể trừu tượng hoàn toàn giao diện 
của lớp với sự hiện thực của nó nhờ từ khóa 
interface.
• Trong interface bạn đặc tả một lớp phải 
làm gì nhưng không cần biết phải làm thế nào.
• Interface là tập các khai báo phương 
thức, hằng mà lớp con kế thừa.
4/7/2018  41
Định nghĩa giao diện
• Interface có cú pháp tương tự lớp nhưng 
không có biến thành viên, chỉ có khai báo 
hằng và các khai báo phương thức.
• Số lượng lớp hiện thực 1 interface là 
không hạn chế.
• 1 lớp cũng được hiện thực số lượng tùy ý các 
interface.
4/7/2018  42
Định nghĩa giao diện
• Để hiện thực 1 interface, lớp phải cài đặt 
đầy đủ tất cả các phương thức mà 
interface đó định nghĩa.
• Interface được thiết kế để hỗ trợ phương 
thức động lúc thực thi chương trình.
4/7/2018  43
Định nghĩa giao diện
• Cú pháp của 1 interface
4/7/2018  44
Hiện thực giao diện
• Sau khi interface được định nghĩa, 1 hay 
nhiều lớp có thể hiện thực interface đó.
• Để hiện thực 1 interface ta dùng từ khóa 
implements, sau đó cài đặt tất cả các 
phương thức mà interface đó định nghĩa
4/7/2018  45
Chú ý
• Các phương thức hiện thực interface phải 
khai báo public.
• Hình thức của phương thức phải giống hệt 
đặc tả trong interface .
• Nếu một lớp chứa 1 interface nhưng 
không hiện thực hết tất cả các phương 
thức lớp phải khai báo abstract.
4/7/2018  46
Đa kế thừa
• Java không cho phép đa kế thừa từ nhiều lớp 
cơ sở
– đảm bảo tính dễ hiểu
– hạn chế xung đột 
• Nhưng có thể cài đặt đồng thời nhiều giao 
diện
4/7/2018  47
Ví dụ
interface Action {
void moveTo(int x, int y);
void erase();
void draw();
}
class Circle1 implements Action {
int x, y, r;
Circle1(int _x, int _y, int _r) { ... }
public void erase() {...}
public void draw() {...}
public void moveTo(int x1, int y1) {...}
}
4/7/2018  48
Truy xuất hiện thực thông qua tham chiếu interface
• Bạn có thể khai báo 1 biến tham chiếu tới 
interface . 
• Khi bạn gọi phương thức phương thức 
thực thi sẽ tự động tìm đến thể hiện thực sự.
4/7/2018  49
Biến trong giao diện
• Có thể dùng các biến trong interface để 
import các hằng dùng chung cho nhiều lớp.
• Khi hiện thực các interface này thì các 
biến trên có tính chất như 1 hằng. 
4/7/2018  50
Kế thừa giao diện
• Một interface có thể được kế thừa từ 1 
interface khác bằng từ khóa extends.
• Khi một lớp hiện thực 1 interface kế thừa 
1 interface khác, nó phải cài đặt tất cả các 
phương thức của cả 2 interface này
4/7/2018  51
Kế thừa giao diện
• Một lớp trừu tượng cũng có thể kế thừa 1 interface
khác.
abstract class Shape implements Action {
protected int x, y;
public Shape() {...}
public Shape(int _x, int _y) {...}
public void moveTo(int x1, int y1) {
erase();
x = x1;
y = y1;
draw();
}
}
4/7/2018  52

File đính kèm:

  • pdfbai_giang_cong_nghe_java_chuong_6_ke_thua_dong_goi_trong_jav.pdf