Session5_Package_Interface_AbstractClass

Download Report

Transcript Session5_Package_Interface_AbstractClass

Package
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
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.
Đặ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
Đị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.
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.
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ó.
Đị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
Điều khiển truy xuất

Các quyền truy xuất:
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;
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ó.


Kế thừa - Inheritance
Nguyễn Thị Tú Mi
Email: [email protected]
Kế thừa trong thế giới thực
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.
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.
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.
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.
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
đè.
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.
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
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.
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ề
Nạp chồng hàm dựng

Cho phép xây dựng
đối tượng bằng
nhiều cách
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 (;)
Các phương thức trừu tượng
Abstract class
Nguyễn Thị Tú Mi
Email: [email protected]
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)
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.
Ví dụ
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”
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
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(); }
...
}
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
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
Thuật ngữ



Kế thừa
Lớp cơ sở, lớp cha
Lớp dẫn xuất, lớp con
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;
}
}
Kế thừa trong Java
Person
-name
-birthday
+setName()
+setBirthday()
Employee
-salary
+setSalary()
+getDetail()
Employee e = new Employee();
e.setName("John");
e.setSalary(3.0);
Thừa kế nhiều tầng
Person
-name
-birthday
+setName
+setBirthday
Mọi đối tượng đều
thừa kế từ lớp gốc Object
Employee
-salary
+setSalary
+getDetail
Manager
-rank
...
Student
-id
...
Programmer
-project
...
Interfaces - giao diện
Nguyễn Thị Tú Mi
Email: [email protected]
Đị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.
Đị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.
Đị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.
Định nghĩa giao diện

Cú pháp của 1 interface
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
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.

Đ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
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) {...}
}
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ự.
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.
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
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();
}
}
Summary