Giải thích được lớp trừu tượng là gì.
Hiện thực được lớp trừu tượng, hành vi trừu tượng bằngJava.
Giải thích đặc điểm của lớp trừu tượng.
Giải thích được interface là gì.
Khai báo được interfece.
Hiện thực được interface trong lớp.
Giải thích được tính thừa kế của interface.
Định nghĩa đối tượng bằng interface.
Giải thích được package của Java là gì.
Tạo được package.
Sử dụng được lớp trong package.
10 trang |
Chia sẻ: haohao89 | Lượt xem: 2446 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Bài giảng Lớp trừu tượng, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
1LỚP TRỪU TƯỢNG
(Abstract Class)
2
Ôn tập
Thừa kế: Kỹ thuật cho phép tái sử dụng data và code Lớp
con thừa hưởng các đặc điểm của lớp cha.
Trong Java, chỉ định thừa kế bằng từ khóa extends ( lớp con
là mở rộng) của lớp cha.
Overloading method: Kỹ thuật cho phép trong một lớp có các
hành vi trùng tên nhưng khác chữ ký.
Overriding method: Kỹ thuật cho phép viết lại code của hành
vi mà lớp con thừa kế tư lớp cha để tạo ra sự khac biệt.
Đa hình trong OOP có được là nhờ kỹ thuật Overriding.
Khi ép kiểu (type casying) lớn sang kiểu nhỏ có thể bị tràn trị.
Kiểm tra một đối tượng có thuộc về một lớp hay không bằng
toán tử instanceof.
Tham số trong hàm Java là tham số trị.
3
Mục tiêu
Giải thích được lớp trừu tượng là gì.
Hiện thực được lớp trừu tượng, hành vi trừu tượng bằng
Java.
Giải thích đặc điểm của lớp trừu tượng.
Giải thích được interface là gì.
Khai báo được interfece.
Hiện thực được interface trong lớp.
Giải thích được tính thừa kế của interface.
Định nghĩa đối tượng bằng interface.
Giải thích được package của Java là gì.
Tạo được package.
Sử dụng được lớp trong package.
4
Nội dung
Lớp trừu tượng là gì?
Hiện thực lớp trừu tượng và hành vi trừu tượng.
Đặc điểm của lớp trừu tượng.
Interface là gì?
Khai báo interface
Hiện thực interface trong một lớp
Interface thừa kế
Định nghĩa trực tiếp đối tượng bằng interface
Package là gì?
Tạo package.
Sử dụng package.
5
Lớp trừu tượng là gì?
Xem kết qủa của việc khái quát hóa sau:
class ANIMAL
void Travel();
class Bird
void Travel()
class Fish
void Travel()
class Snake
void Travel()
Bạn có hình
dung nổi một
ANIMAL di
chuyển như thế
nào không?
Bạn có hình dung nổi
một đối tượng thuộc
các lớp này di chuyển
như thế nào không?
Không
Trừu tượng
Có cụ thể
6
Lớp trừu tượng- Abstract class
Là kết qủa của việc khái quát hóa qúa cao đến nỗi không
biết viết code thế nào.
Là lớp có những hành vi chỉ khai báo mà không viết code.
Để dành code cụ thể sẽ được hiện thực ở các lớp dẫn xuất
( lớp cụ thể hơn).
Tư duy tự nhiên:
Từ các đối tượng cụ thể Lớp cụ thể.
Từ các lớp cụ thể có cùng tính chất lớp trừu tượng.
7Hinh
PI
Tên
+ DienTich()
Hinh_CN
- cdai
- crong
+ DienTich()
HinhTron
- bankinh
+ DienTich()
HinhVuong
- canh
+ DienTich()
Hinh_TGiac
- diem1
- diem2
- diem3
+ DienTich()
8
Lớp trừu tượng (abstract)
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...
9
Bài tập - Lớp trừu tượng
Mô tả các lớp cho hình tròn, hình chữ nhật, hình vuông, hình
tam giác.
Dùng kỹ thuật phân tích phân cấp thừa kế, khái quát hóa các
lớp này để sinh ra một lớp trừu tượng có hành vi tính diện
tích và tình chu vi.
Viết code – thực hành:
Cài đặt các lớp này. Viết chương trình khai báo biến và hành vi thuộc lớp
trừu tượng. Xuất diện tích của các hình khác nhau.
Diện tích hình vuông: canh*canh
Diện tích HCN: (dai*rong)
Diện tích hình tròn: PI*R*R
Diện tích hình tam giác khi biết tọa độ 3 điểm (x1, y1), (x2, y2), (x3, y3):
x21=x2 - x1; y21=y2 - y1; x31=x3 - x1; y31=y3 - y1;
Diện tích = | y21*x31-x21*y31 | /2;
Hinh
PI
Tên
+ DienTich()
Hi h_CN
- cdai
- crong
+ DienTich()
HinhTron
- bankinh
+ DienTich()
HinhVuong
- canh
+ DienTich()
Hinh_TGiac
- diem1
- diem2
- diem3
+ DienTich()
10
Lớp trừu tượng.
Tư duy theo lối chuyên gia: Khai báo lớp trừu tượng trước (
hoặc tập các hành vi mà ta gọi là inteface – học sau) để các
lớp cụ thể hiện thực các hành vi này sau.
Lớp cha là lớp trừu tượng, lớp con chưa hiện thực đủ các
hành vi trừu tượng được kế thừa từ lớp cha thì lớp con này
vẫn là lớp trừu tượng.
Sử dụng từ khóa abstract để khai báo một lớp trừu tượng
hoặc 1 hành vi trừu tượng
11
Lớp trừu tượng
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();
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ó.
12
Hiện thực lớp trừu tượng
Cú pháp khai báo lớp trừu tượng
abstract class ClassName
{
abstract [modifier] Type MethodName (Args);
}
Kết hợp cho phép
abstract public
abstract protected
Kết hợp KHÔNG cho phép
abstract private
abstract static
abstract final
13
Lớp trừu tượng
public abstract class Hinh
{
static final double PI = 3.14159;
public abstract double getArea();
public abstract double getVolume();
}
class HinhTron extends Hinh
{
double radius;
public double getArea() { return PI*radius*radius; }
public double getVolume() { return 0; }
}
class HinhLapPhuong extends Hinh
{
double a, b, c;
public double getArea() { return 2*(a*b+b*c+c*a); }
public double getVolume() { return a*b*c; }
}
14
Hiện thực lớp trừu tượng
Có hành vi
abstract mà
lớp không
có chỉ thị
abstract
Hành vi không có
chỉ thị abstract
thì phải có code
15
Ví dụ - Abstract class
Chưa thể viết code vì lương 1 người =
lương cơ bản * hệ số
16
Đặc điểm của lớp trừu tượng.
Không thể khởi tạo một đối tượng thuộc lớp trừu tượng (abstract)
mà chỉ khởi tạo đối tượng thuộc lớp cụ thể (concrete).
17
Đặc điểm của lớp trừu tượng.
Tham chiếu lớp cha chỉ đến lớp con kể cả lớp cha là lớp trừu
tượng hay lớp cụ thể tính đa hình trong OOP
18
Biến lớp ông chỉ đến
đối tượng lớp cháu
Một lớp con cũng có thể là lớp trừu tượng và biến tham chiếu của
lớp ông cha có thể chỉ đến đối tượng lớp con cháu tính đa hình
trong OOP
Đặc điểm của lớp trừu tượng.
19
Sự kết hợp giữa abstract với các chỉ thị khác
20
Interface là gì?
Theo phương pháp phân cấp thừa kế, có thể lớp cha có
những hành vi chưa biết viết code thề nào hành vi trừu
tượng lớp trừu tượng.
Ta muốn một lớp được thừa kế từ nhiều lớp trừu tượng mà
không bị khống chế bởi tính đơn thừa kế.
Giải pháp: Interface
21
Interface là gì?
Một interface là một tập những phương thức trừu tượng
(abstract methods) và những hằng số trừu tượng
Interface mang ý nghĩa “như là một lớp hoàn toàn trừu
tượng” hay Interface được xem như là một lớp hoàn toàn
trừu tượng.
Một interface được sử dụng để định nghĩa một tập những
phương thức mà một class sẽ thực hiện
Interface là một đặc điểm của các ngôn ngữ OOP mới như
Java, C#.
Interface là một công cụ để hiện thực dạng đa thừa kế trong
Java, C#.
22
Khai báo interface
Khai báo interface bằng 1 file.java, biên dịch thành file.class.
public hoặc bỏ qua
public: Mọi nơi đều có thể truy xuất
Không có modifier: (default) Chỉ trong cùng gói mới có thể
truy xuất
Một public interface đòi hỏi: Tên file chứa khai báo interface
phải cùng tên với tên interface
Từ khóa
Cú pháp:
[Modifier] interface InterfaceName
{ return_type Method1( param_list);
Datatype final_var1 = Value1; // khai báo hằng
return_type Method2( param_list); // prototype
Datatype final_var2 = Value2;
….
}
23
Ví dụ
public interface Hinh {
public static final double PI=3.1415;
public abstract double DienTich();
double ChuVi();
}
Từ khóa
Dấu ; được theo sau
mỗi phương thức
24
Interfaces
Một interface không thể được thể hiện
Những phương thức trong một interface có bổ từ truy xuất
public
Một lớp implement (thực thi) một interface bằng cách:
Định nghĩa tên interface trong class header
Cung cấp những thực thi cụ thể cho mỗi phương thức trừu
tượng trong interface
Nếu một class thực thi một interface, nó phải định nghĩa tất cả
các phương thức trong interface, nếu không trình biên dịch sẽ
báo lỗi.
25
Thực thi Interface
Một class có thể thực thi nhiều interface
Mỗi một interface được phân biệt bởi dấu phẩy (,)
Lớp phải thực thi tất cả các phương thức trong tất cả các
interfaces được liệt kê trong class header
Một lớp thực thi một interface cũng có thể thực thi các
phương thức khác của nó.
Để khai báo một lớp thực thi interfaces, sử dụng từ khóa
implements :
class ClassName implements interface1, interface2
{
// all methods of both interfaces
}
26
Cú pháp xây dựng lớp có hiện thực interface
[modifier] class Tên extends LớpCha implements Interface1, interface2,...
{
}
Thứ tự
không
quan
trọng
27
Ví dụ
class HinhVuong implements Hinh{
protected double edge;
public HinhVuong (double e){
edge=e;
}
public double DienTich() {
return(edge*edge);
}
public double ChuVi() {
return(edge*4);
}
}
28
Ví dụ
interface Drawable
{
public void draw();
}
public abstract class Hinh{...}
public class HinhTron extends Hinh implements Drawable
{
...
public void draw() {...}
}
29
Thực thi Interface
Lớp trừu tượng có thể
chưa cụ thể các method
của interface
Modifier của hành vi
cụ thể của các method
trong interface phải là
public
Lớp trừu tượng có thể chưa cụ thể các method của interface.
Modifier của hành vi cụ thể của các method trong interface
phải là public
30
Khai báo biến thông
qua interface
Biến interface chỉ được dùng
với các hành vi có trong interface
Ví dụ: Biến interface
31
Ví dụ: Biến interface
Sửa lại chương trình
32
Bài tập – về nhà
Tương tự với hình vuông, bạn tự làm với Ellipse, tam giác,
hình chữ nhật, hình tròn.
Chu vi ellipse: pi(Rx + Ry)
diện tích ellipse: pi*Rx*Ry
33
Interface thừa kế
Interface có thể thừa kế interface cha
Interface con là hội lại các khai báo hành vi.
Cú pháp:
interface InterfaceSon extends InterfaceFather
{
}
Nếu một lớp implements interface con thì phải cụ thể hóa cả
các method có trong interface cha.
34
Ví dụ
35
Định nghĩa trực tiếp đối tượng bằng interface
Có thể định nghĩa trực tiếp một đối tượng bằng interface hoặc
lớp trừu tượng với điều kiện có cụ thể hóa các hành vi.
Đối tượng được định nghĩa trực tiếp gọi là đối tượng thuộc
lớp vô danh (anonymous class). Nghĩa là, không có tên lớp,
chỉ định nghĩa một đối tượng thuộc interface hoặc lớp trừu
tượng rồi hiện thực các hành vi.
36
Cụ thể hóa hành vi
Cụ thể hóa các hành vi
Xem kỹ cú pháp
Ví dụ
37
Đối tượng interface và lớp trừu tượng dang dở
Không có đoạn này
khi compile sẽ báo
lỗi
38
Lớp “giả” trừu tượng
Một thể hiện của 1 interface phải hiện thực đầy đủ các hành
vi đã khai báo trong interface này.
Tình huống: Ta muốn có một thể hiện của 1 interface nhưng
chỉ muốn hiện thực một vài methods của interface này thì
sao?
Giải pháp: Lớp “giả” trừu tượng, lớp abstract nhưng có code
“thật”.
interface
abstract class
implements các
methods của
interface bằng
code trống
Tạo động một đối tượng
thuộc lớp trừu tượng
(anonymous class),
chỉ override methods
được cần đến.
Đây là kỹ thuật mà Java sử dụng để tạo các lớp gọi là Adapter
giúp cho người lập trình bớt phải viết code các methods trong interface
39
Thí dụ
Lớp abstract nhưng có
code thật là code rỗng
40
Interface Comparable
Thư viện lớp chuẩn của java chứa nhiều interfaces giúp thực hiện
trong một vài trường hợp
Interface Comparable chứa một phương thức trừu tượng gọi là
compareTo, phương thức này được sử dụng để so sánh 2 đối
tượng
Class String thực hiện Comparable cho chúng ta khả năng sắp xếp
những chuỗi trong thứ tự alphabe
Bất kỳ lớp nào cũng có thể implement interface Comparable để
cung cấp một kỹ thuật cho việc so sánh các đối tượng.
if (obj1.compareTo(obj2) < 0)
System.out.println ("obj1 is less than obj2");
• Giá trị trả về từ phương thức compareTo là số âm nếu
obj1 nhỏ hơn obj2, 0 nếu chúng bằng nhau, và số dương
nếu obj1 lớn hơn obj2
41
Interface vs. Abstract class
Trong interface, dữ liệu phải là hằng, abstract class có thể có
cả dữ liệu biến.
Trong interface, phương thức chỉ có header mà ko có thực
hiện, abstract class có thể có phương thức đầy đủ.
Trong interface, tất cả dữ liệu là public final static và phương
thức là public abstract
public interface T1{
public static final int k=1;
public abstract void p();
}
public interface T1{
int k=1;
void p();
}
42
Interface vs. Abstract class
Có thể truy nhập các hằng trong interface sử dụng cú pháp
InterfaceName.CONSTANT_NAME.
Có thể sử dụng interface để thực hiện đa thừa kế với class
và các subinterface.
public class NewClass extends BaseClass
implements Interface1, …, InterfaceN {
…
}
public interface NewInterface extends
Interface1, …, InterfaceN {
// các hằng và phương thức trừu tượng
}
43
Package là gì?
Bài
toán
class C1
class C2
class C3
.......
class Cn
Quản lý thế nào?
Phân nhóm
theo chức năng
Nhóm 1
class C1
class C2
class C3
Nhóm 2
class C4
class C5
class C6
Nhóm 2_1
class C7
class C8
Nhóm 2_2
class C9
class C10
Nhóm ...
class C11
....
class Cn
Mỗi nhóm để trong
một thư mục
Package
Phân tích, quản lý
project
44
Package: gói phần mềm.
Là một nhóm các class, interface, các gói khác đã được biên
dịch thành Java bytecode.
Tổ chức của 1 package là 1 thư mục có tên là tên của
package Sub-package là 1 gói con (thư mục con) của 1
package mức cao hơn (giống cấu trúc thư mục).
Gói là công cụ tạo khả năng tái sử dụng mã (reusable code).
Package là gì?
45
Tạo package
Khai báo package trong code của class.
Tên file phải là tên lớp, mỗi lớp để trong 1 file riêng biệt
Dùng từ khóa package
Cú pháp: package PackageCha[.PackageCon];
Phải là dòng đầu tiên của code java.
/* Comment */
package PackageCha[.PackageCon];
[import OtherPackageName ;]
class ClassName
{ .......
}
Khi biên dịch thành công:
-Nếu chưa có thư mục
PackageName thì thư mục
này sẽ được tự động tạo ra
-file.class của code này sẽ
được đặt vào thư mục này.
46
Ví dụ
Tạo gói MyPackage có cấu trúc:
47
package MyPackage; // file BtCh3/Calculate.java
public class Calculate
{ public static double Volume(double l, double w, double h)
{return l*w*h;}
public static double Add(double n1,
double n2)
{ return n1+n2;}
}
Sau khi biên dịch, cấu trúc gói theo yêu cầu sẽ được tự động sinh ra.
Ví dụ
48
package MyPackage.Shape; // BtCh3/Circle.java
public class Circle
{ double r;
public Circle(double rr) { r=rr;}
public double Circumference()
{ return 2*Math.PI*r;}// chu vi
public double Area()
{ return Math.PI* r*r; }
}
Ví dụ
49
Sử dụng Package
Dùng chỉ thị import với một trong các cú pháp sau:
import PackageName.*;
import PackageCha.PackageCon.*;
import PackageName.ClassName;
import PackagCha.PackageCon.ClassName;
50
Ví dụ
import java.io.*;
import MyPackage.
import MyPackage.Shape.Circle;
class TestMyPackage
{ public static void main(String args[])
{
System.out.println(Calculate.Volume(3,4,5));
Circle C= new Circle(5);
System.out.println(C.Area());
}
} 60.0
78.53981633974483
51
Ví dụ
Tạo các package
với cấu trúc:
52
Ví dụ
53
Ví dụ
54
Ví dụ
55
Tham khảo gói java.util
để biết về các lớp java
làm sẵn để quản lý
các loại danh sách
Ví dụ
56
import hai lớp
Ví dụ
57
Bài tập
Bạn viết thêm:
Lớp FacultyList để quản lý danh sách giáo viên đưa vào gói
Faculty.
Lớp FacultyListDemo để minh họa việc quản lý danh sách
giáo viên.
58
THANK YOU