BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI JAVA ( Chương 3)

Chia sẻ bởi Trần Thị Thu Thủy | Ngày 19/03/2024 | 19

Chia sẻ tài liệu: BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI JAVA ( Chương 3) thuộc Công nghệ thông tin

Nội dung tài liệu:

Chương 03
LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG
CLASS – ABSTRACT DATA TYPE
Ôn tập
ADT : Khaí quát hóa một tập đối tượng thành một kiểu dữ liệu.
ADT có thể là một cấu trúc hoặc một class.
Object = các thuộc tính mô tả (thành phần dữ liệu)+ các hành vi (thành phần hàm)
class: ADT cho một tập các đối tượng tương tự nhau (cùng data, cùng functions).
Instance: Một mô tả của đối tượng trong bộ nhớ của chương trình.
Ba khái niệm cơ bản trong OOP: Đóng gói, Thừa kế, đa hình.
Đóng gói (encapsulation) : Gói dữ liệu + hành vi (code), bên ngoài chỉ có thể truy cập một số thuộc tính hoặc hành vi của đối tượng của một lớp thông qua các công cụ giao tiếp.
Thừa kế: Một lớp có thể thừa hưởng dữ liệu và hành vi của lớp cha. Một ngôn ngữ OOP có thể hỗ trợ đơn thừa kế hoặc đa thừa kế.
Đa hình: Khả năng cho phép viết lại code của một hành vi được thừa kế để tạo ra những khác biệt trong ứng xử giữa lớp cha và lớp con cho cùng một hành vi.
Gửi thông điệp là yêu cầu một đối tượng thực thi một hành vi mà đối tượng này có.
Mục tiêu
Nắm vững cấu trúc của một lớp.
Nắm vững các chỉ thị truy cập.
Giải thích được constructor và destructor.
Giải thích được khái niệm đối tượng hiện hành.
Truy cập thành phần thừa kế từ lớp cha.
Hiện thực được lớp bằng Java.
Nội dung
3.1- Cấu trúc 1 lớp và access modifiers
3.2- Sử dụng một lớp
3.3- Chỉ thị this
3.4- Overloading một hành vi
3.5- Hành vi khởi tạo (constructor)
3.6- Chỉ thị super
3.7- Hành vi hủy (destructor)
3.8- Thành phần static
3.9- Chỉ thị final
3.10- Phương pháp giải bài toán với Java
3.11- Chạy chương trình có tham số với JCreator
3.12- Một số lớp cơ bản của Java
3.1- Cấu trúc 1 lớp và access modifiers
Lớp: Hiện thực chung cho một tập các đối tượng có cùng đặc điểm và hành vi.
Một lớp có thể là lớp con của một lớp đã có.
Hiện thực lớp:
Khai báo mức cho phép sử dụng.
Khai báo lớp cha
Khai báo các thành phần thuộc tính.
Hiện thực code các hành vi.
Lớp và mỗi thành phần cần phải chỉ định mức độ cho phép truy cập (tính bảo mật)  access modifier
Mỗi ngôn ngữ OOP quy định cú pháp riêng cho việc hiện thực lớp.
Cấu trúc một lớp
Access Modifiers
class A
là con
Cú pháp khai báo class trong Java

[Modifier] class CLASSNAME
extends FATHERCLASSNAME
{
[Modifier] DataType1 Property1 [=Value];
[Modifier] DataType2 Property2 [=Value];
[Modifier] DataType MethodName( DataType Arg,…)
{
}
}

Không có modifier : Mặc định là friendly, cho phép các đối tượng thuộc các class cùng package ( cùng thư mục)truy cập
Đặc tính truy xuất
3.2- Sử dụng một lớp
Định nghĩa biến đối tượng.
Biến đối tượng trong Java là tham khảo (địa chỉ) của vùng nhớ chứa dữ liệu của đối tượng.
Thí dụ 1
Lớp public thì tên file.java phải trùng với tên lớp
Vì khi bên ngoài truy cập, nhìn tên file là biết tên lớp
Error
Nếu không là lớp public,
tên lớp và tên file có thể khác nhau
Vì lớp này chỉ dùng trong một gói (package)
Thí dụ 2
từ khóa this để chỉ thị đối tượng đang thao tác. Nhờ đó phân biệt được tham số x và thành phần x
Thí dụ 3
Thí dụ 4
Sửa lại lớp
VONGTRON:
không có main
Xây dựng lớp SDVT sử dụng lớp
VONGTRON để trong cùng thư mục.
Biên dịch có lỗi vì trong lớp SDVT
không thể truy cập private method
của lớp VONGTRON
Thí dụ 5
Lớp SDVT truy cập trực tiếp được thuộc tính x của vong tròn v vì khai báo thuộc tính này là “friendly” – không chỉ định modifier.
Hai file này cùng thư mục nên SDVT truy cập được thuộc tính này.
Thí dụ 6
Trong lớp
VONGTRON,
x,y,r có thuộc tính
protected. Nhưng,
lớp SDVT cùng thư
mục với lớp
VONGTRON nên có
thể truy cập thuộc
tính này.
3.3- Chỉ thị this
Khi hiện thực hành vi của 1 lớp. Truy xuất một thành phần bằng chính tên của thành phần này hoặc this.tênThànhPhần.
Khi tham số trùng với tên thuộc tính thì nhờ từ khóa this chúng ta phân biệt rõ thuộc tính với tham số.
Các môi trường lập trình Java hiện nay hầu hết đều có trợ giúp ngữ cảnh. Do vậy, qua từ khóa this, người lập trình dễ truy cập 1 thành phần của lớp.
Thí dụ
Thí dụ
3.4- Overloading một hành vi
Overloading: Kỹ thuật cho phép xây dựng các hành vi trùng tên nhưng khác chữ ký (signature) trong cùng một lớp.
Chữ ký bao gồm:
Số lượng tham số.
Thứ tự các kiểu của các tham số.
Thí dụ
3 hành vi cùng
có tên là
setData
3.5- Hành vi khởi tạo (constructor)
Hành vi được thực thi ngay vào lúc khởi tạo đối tượng.
Một lớp có thể có 0/1/n contructor.
Cú pháp constructor
[Modifier] ClassName ( Parameters)
{ }
Chú ý:
Constructor không có kiểu trả trị.
constructor....
Constructor không tham số còn được gọi là constructor chuẩn.
Ngôn ngữ có sẵn 1 constructor chuẩn làm công việc xóa trống vùng nhớ chứa dữ liệu của đối tượng  Trị 0/null.
Khi một lớp đã có constructor thì constructor mặc định của ngôn ngữ không còn được áp dụng nữa.
Tập các constructor hình thành các cách định nghĩa đối tượng.
Định nghĩa một đối tượng không theo một mẫu constructor sẽ gây lỗi.
Thí dụ: constructor của ngôn ngữ (gõ 3 phím)
b
b
1000
Nếu là constructor tự tạo thì việc
khởi tạo trị ban đầu được ấn định
bởi code trong constructor.
Thí dụ: constructor là mẫu khởi tạo đối tượng
Nếu một lớp có constructor thì constructor mặc định của ngôn ngữ
không được sử dụng nữa.
Thí dụ: lớp có nhiều constructor
Thí dụ: gọi hành vi trong constructor
Gợi ý khi xây dựng constructor
Việc thường làm là gán trị cho các thành phần dữ liệu của đối tượng.
Số constructor có trong một lớp thường là những dạng dữ liệu của đối tượng mà ta muốn có ngay lúc ban đầu.
3.6- Chỉ thị super
Dùng để truy xuất dữ liệu hoặc hành vi kế thừa từ lớp cha.
Gọi constructor của lớp cha
Gọi method thừa kế từ lớp cha
super...
Trong Java, nếu dùng super thì super phải là
dòng code đầu tiên trong constructor của lớp con
Ý định:
Xây dựng hành vi
outData trong lớp con
bằng cách gọi hành vi
outData của lớp cha
rồi xuất cost.

 Error
super...
3.7- Hành vi hủy (destructor)
Đối tượng sống kể từ khi ta khởi tạo đối tượng (bằng toán tử new) cho đến hết khối chứa nó.
Khi ra khỏi khối chứa đối tượng, ta nói đối tượng đã chết.
Một số ngôn ngữ OOP ( C++, C#) cho phép ta viết code sẽ được thực
thi vào lúc đối tượng chết nhằm trả tài nguyên đã cấp phát động.
Java chỉ dùng cách cấp phát đối tượng động, có trình gom rác riêng
và không hỗ trợ hành vi hủy.
3.8- Thành phần static
Đôi khi ta muốn một dữ liệu, một đoạn code, một hành vi là toàn cục để trongmột lớp  Dùng chỉ thị static.
Dữ liệu static là DỮ LIỆU TOÀN CỤC.
Hành vi static là hành vi toàn cục
Code static là CODE TOÀN CỤC và chỉ thao tác lên dữ liệu static.
Truy xuất dữ liệu và code này thông qua tên lớp hoặc một đối tượng thuộc lớp có thành phần static.

(1) ClassName.StaticMember
(2) ClassName obj= new ClassName();
obj. StaticMember
Dữ liệu static- Thí dụ
Truy xuất static data bằng tên lớp
Truy xuất static data bằng tên đối tượng thuộc lớp
Hành vi static- Thí dụ
Nhận xét
Hành vi static được bên ngoài sử
dụng mà không cần khai báo biến
đối tượng thuộc lớp. Do vậy, hành
vi static thường có tham số không
liên quan đến đối tượng thuộc lớp.
Code static- Thí dụ
Code static được thực thi ngay khi lớp có code này được tham khảo tới.
Code static- Thí dụ
Code static chỉ tham khảo
dữ liệu static
Code static – thí dụ
Nếu có nhiều đoạn code static,
các đoạn code này được thực thi tuần tự
Code static với constructor
Constructor chuẩn
không đụng đến
thành phần stattic
Code static với constructor
tham khảo khi chưa có đối tượng
tham khảo khi đã có đối tượng
Vì khi có đối tượng, constructor
có code làm thay đổi trị của n
nên kết qủa đã khác đi.
3.9- Chỉ thị final
Làm sao để không cho phép kế thừa từ một lớp ( lớp không con).
Làm sao không cho phép sửa một dữ liệu ( muốn dữ liệu là hằng).
Dùng chỉ thị final
final Data là hằng  cấm sửa
final class là lớp không con
final method là hành vi không cho phép lớp con viết lại (override)
3.10- Phương pháp giải bài toán với Java
Bài toán đơn giản
Bài toán phức tạp
3.10.1- Bài toán đơn giản
Bài toán đơn giản -Thí dụ
Viết chương trình xuất 100 số Fibonacci đầu tiên. Dãy Fibonacci : 1,1,2,3,5,8,… 2 số đầu là 1, các số sau bằng tổng 2 số trước nó
class BaiToan
{ public static void main (String args[])
{ int t1=1, t2=1, t3=1;
for (int i=1; i<=100; i++)
{ if (i>2)
{ t3= t1+t2;
t1=t2;
t2=t3;
}
System.out.println(t3 + “, ”);
}
}
}
3.10.2- Bài toán phức tạp
Thí dụ
Bài toán phức tạp
Tóm tắt
class = Members
Member = Datum/method
access modifier: public, private, protected
Không có access modifier được hiểu là “friendly”
Từ khóa this: Chỉ thị....................................
constructor là ..........................................
super: Từ khóa truy cập lớp cha và nếu có thì phải xuất hiện ở dòng đầu tiên của constructor trong lớp con.
Tóm tắt
chỉ thị static dùng để chỉ thị .....................
...............................................................
Truy xuất thành phần static của một lớp bằng cách
(1): ........................................................
(2):.........................................................
Ta có thể truy xuất đoạn code static mà không là hành vi của 1 lớp không?
Tóm tắt
Tập các constructor của 1 lớp tạo ra .................................................................
Java có hỗ trợ destructor?
Dữ liệu final là ......................................
Hành vi final là hành vi .............................
Lớp final là lớp ...................................
Bài tập:
Bài 1:Viết chương trình xuất ra danh sách nhân viên gồm 10 người theo dạng:
Mã Tên Ngày vào làm lương
NV001 Hoa 2004-07-21 10000
..........................................................

(các thông tin về người khác sinh viên tự ấn định)
Dữ liệu của các bài toán được đưa vào bài toán
thông qua constructor
Bài tập
Bài tập 2:Tương tự bài 1 nhưng thay vì mô tả lương bằng 1 con số, mô tả lương thông qua hệ số lương nhân với lương cơ bản là một dữ liệu static (xem lại thí dụ).
Chạy chương trình có tham số với JCreator
Trong JCreator, để chạy chương trình có tham số, ta phải tạo Project.
Project: Dự án, một tập các file của một phần mềm.
Tạo Project
Đặt tên cho project
Kết qủa: Project trống (chọn File view)
Thêm 1 file
Viết chương trình
Chỉ định tham số cho chương trình
Đặt tham số nhanh:
Bài tập
(1) Viết chương trình tính tổng các số từ chuỗi tham số nhập của chương trình.
(2) Viết chương trình xuất các tham số của chương trình theo thứ tự tăng dần.
3.12- Một số lớp cơ bản của Java.
Lớp Object
Lớp String
Các lớp gói (wrapper)
Lớp Math

3.12.1- Lớp Object
Là lớp cha của mọi lớp trong java ( trực tiếp/gián tiếp)
Được để trong gói java.lang (java.lang.Object)
Định nghĩa các trạng thái cơ bản và các phương thức cơ bản của mọi lớp phải có như: So sánh nó với 1 đối tượng khác (equals), chuyển đổi mô tả thành chuỗi (toString), đợi (wait) điều kiện, nhận biết (notify) các đối tượng khác khi biến điều kiện có thay đổi, lấy Class (getClass)
Hành vi hashCode() cho biết địa chỉ của dữ liệu của đối tượng.
Lớp Object (tt)
Thí dụ
Student2@18d107f
Kết qủa của method toString() :
Tên lớp + @ + Địa chỉ hệ 16 của thực thể
(Lưu ý: Địa chỉ của thực thể chứ không
phải là địa chỉ của biến đối tượng )
Lớp có thành phần là lớp
và địa chỉ biến đối tượng
Giải thích
Nhận xét
Thực thể của lớp là một vùng nhớ chứa dữ liệu của thực thể.
Biến đối tượng mang trị là một tham chiếu đến thực thể của lớp.
obj1= obj2; là phép gán địa chỉ tham chiếu giữa 2 đối tượng.
Chú ý tình huống bên:
String s1
String s2
100
Hello
biến
value
s2=s1;
100
100
Hello
100
100
Hello
s2=“Hi”;
Hi
3.12.2- Lớp String - chuỗi ký tự
Định nghĩa 1 String:
String Str1=“Hello”;
String Str2= new String(“Hi”);
Nối String
String Str3= Str1 + Str2; // Str3=“HelloHi”
String Str4 = Str3 + 1; // Str4= “HelloHi1”
String pool ( hồ/ bảng chứa chuỗi)
Khi nhiều biến String cùng mang 1 nội dung, chúng cùng chỉ đến 1 phần tử trong String pool
Thí dụ:
String Str1 = “Hello”;
String Str5= “Hello”;
I love you
Hello
Forget me not
Str1
Str5
Lớp String (tt)- Methods
Lớp String (tt)- Methods
Lớp String (tt)- Methods
Thí dụ về lớp String
Các hành vi của lớp String trả về chuỗi
kết qủa thì sẽ trả về chuỗi mới còn chuỗi
gốc không đổi.
Nếu muốn làm thay đổi chuỗi gốc thì
dùng lớp StringBuffer cũng thuộc gói
java.lang. Các hành vi cũng tương tự
như lớp String.
3.12.3-Các lớp gói (wrappers)
Dữ liệu thuộc kiểu cơ bản như int, long, char,... chỉ là dữ liệu không có hành vi kết hợp.
Wrapper , trong gói java.lang, là lớp bao lấy các kiểu dữ liệu cơ bản nhằm tạo ra tính OOP cho các kiểu cơ bản.
Các hành vi của lớp Wrapper đa số là các hành vi static hiện thực các thao tác lên dữ liệu thuộc kiểu tương ứng.
Biến thuộc lớp Wrapper chứa địa chỉ của dữ liệu.
Wrapper classes
Đọc Documentation để biết về các hành vi của các wrapper class
Wrapper-Thí dụ
3.12.4- Lớp Math
Trong gói java.lang
Chứa các hàm xử lý toán học.
Là lớp final.
Thí dụ:
Hàm random
trả trị
[ 0.0, 1.0 [
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Trần Thị Thu Thủy
Dung lượng: | Lượt tài: 1
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)