Đang tải... (xem toàn văn)
Mỗi đối tượng có bản sao các thuộc tính của riêng nó■ Ví dụ: một chiếc Ô tô đang đi có thể có màu đen, vận tốc 60 km/h■ Các thuộc tính phải được khai báo bên trong lớp... Lớp và đối tượn
Trang 1Chương 2
LẬP TRÌNH HĐTOOP
Trang 3GIỚI THIỆU
Trang 4Lập trình hướng đối tượng
LÀ GÌ ?
Trang 5Giới thiệu
và phát triển) lập trình dựa trên kiến trúc lớp (class) và đối tượng
(object)
Trang 6Giới thiệu
● Chương trình được chia thành các đối tượng.
● Các cấu trúc dữ liệu được thiết kế sao cho đặc tả được đối tượng.
● Các hàm thao tác trên các vùng dữ liệu của đối tượng được gắn với cấu trúc dữ liệu đó.
● Dữ liệu được đóng gói lại, được che giấu và không cho phép các hàm ngoại lai truy nhập tự do.
● Các đối tượng tác động và trao đổi thông tin với nhau qua các hàm
● Có thể dễ dàng bổ sung dữ liệu và các hàm mới vào đối tượng nào đó khi cần thiết
● Chương trình được thiết kế theo cách tiếp cận từ dưới lên (bottom-up)
Trang 7Giới thiệu
● Phương pháp giải quyết ‘top-down’ (từ trên xuống) cũng còn được gọi là ‘lậptrìnhhướng cấu trúc’ (structured programming) Nó xác định những chức năngchínhcủa một chương trình và những chức năng này được phân thành nhữngđơn vị nhỏ hơn cho đến mức độ thấp nhất.
● Phương pháp OOP cố gắng quản lý việc thừa kế phức tạp trong những vấnđề đời thực Để làm được việc này, phương thức OOP che giấu một vài thôngtin bên trong cácđối tượng OOP tập trung trước hết trên dữ liệu Rồi gắn kếtcácphương thức thao tác trên dữ liệu, việc này được xem như là phần thừakế của việc định nghĩa dữ liệu.
Trang 9Giới thiệu
● Abstraction: Trừu tượng hóa ● Encapsulation: Đóng gói
● Inheritance: Kế thừa ● Polymorphism: Đa hình
Trang 10Giới thiệu
Trang 11Các khái niệm cơ bản
chất và hành vi chung của những sự vật, hiện tượng tồn tại trong thực tế.
➢Lớp là cách phân loại (classify) các đối tượng dựa trên đặc điểm
Trang 12Các khái niệm cơ bản
➢Đối tượng (object): trong thế giới thực khái niệm đối tượng có thể
giới thực: là một thực thể cụ thể mà ta có thể sờ, nhìn thấy hay cảm nhận được.
○ Đối tượng giúp hiểu rõ thế giới thực ○ Cơ sở cho việc cài đặt trên máy tính
○ Mỗi đối tượng có định danh, thuộc tính, hành vi ○ Ví dụ: đối tượng sinh viên
MSSV: “TH0701001”; Tên sinh viên: “Nguyễn Văn A”
Trang 13Các khái niệm cơ bản
➢Đối tượng (object) của lớp: một đối tượng cụ thể thuộc 1 lớp là 1
thể hiện cụ thể của 1 lớp đó Một lớp có thể có nhiều thể hiện cụ thể (nhiều đối tượng)
Vídụ: Sinh viên A, Sinh viên B là đối tượng của lớp Sinh viên.
Trang 14Các khái niệm cơ bản
➢Lớp (class): là khuôn mẫu (template) để sinh ra đối tượng Lớp là
sự trừu tượng hóa của tập các đối tượng có các thuộc tính, hành vi tương tự nhau, và được gom chung lại thành 1 lớp.
Vídụ: lớp các đối tượng Sinhviên
○ Sinh viên “Nguyễn Văn A”, mã số TH0701001 → 1 đối tượng thuộc lớp
○ Sinh viên “Nguyễn Văn B”, mã số TH0701002 → là 1 đối tượng thuộc lớp Sinhviên
Trang 15Các khái niệm cơ bản
➢ Hệ thống các đối tượng: là 1 tập hợp các đối tượng
○ Mỗi đối tượng đảm trách 1 công việc ○ Các đối tượng có thể quan hệ với nhau
○ Các đối tượng có thể trao đổi thông tin với nhau ○ Các đối tượng có thể xử lý song song, hay phân tán
Trang 16LỚP VÀ ĐỐI TƯỢNG TRONG JAVA
Trang 17Lớp và đối tượng trong Java
thức (hành vi) dùng để mô tả một nhóm những đối tượng cùng loại.
○ Thuộc tính.
○ Phương thức
Trang 18Lớp và đối tượng trong Java
Trang 19Lớp và đối tượng trong Java
■ Các thuộc tính của cũng là các giá trị trừu tượng Mỗi đối tượng có bản sao các thuộc tính của riêng nó
■ Ví dụ: một chiếc Ô tô đang đi có thể có màu đen, vận tốc 60 km/h
■ Các thuộc tính phải được khai báo bên trong lớp
Trang 20Lớp và đối tượng trong Java
■ Xác định các hoạt động chung mà tất cả các thể hiện của lớp có thể thực hiện được.
■ Xác định cách một đối tượng đáp ứng lại một thông điệp
■ Thông thường các phương thức sẽ hoạt động trên các thuộc tính và thường làm thay đổi các trạng thái của lớp.
■ Bất kỳ phương thức nào cũng phải thuộc về một lớp nào đó ■ Ví dụ: Lớp Ô tô có các phương thức
● Tăng tốc ● Giảm tốc
Trang 21Lớp và đối tượng trong Java
kiểu dữ liệu đó.
○ Đóng gói: chứa đựng dữ liệu và các hàm/thủ tục liên quan
○ Che giấu dữ liệu: các thực thể phần mềm khác không can thiệp trực tiếp vào dữ liệu bên trong được mà phải thông qua các phương thức cho phép
○ Trừu tượng: Lớp chính là kết quả của quá trình trừu tượng hóa dữ liệu: Lớp định nghĩa một kiểu dữ liệu mới, trừu tượng hóa một tập các đối tượng
Trang 22Lớp và đối tượng trong Java
➢Khai báo lớp (class):
Trang 23Lớp và đối tượng trong Java
➢Thuộc tính: các đặc điểm mang giá trị của đối tượng, là vùng dữ
liệu được khai báo bên trong lớp
Trang 24Lớp và đối tượng trong Java
➢Phương thức: chức năng xử lý, hành vi của các đối tượng Phương
Trang 25Lớp và đối tượng trong Java
Trang 26Các mức truy cập trong Java
● Access Modifer trong Java xác định phạm vi có thể truy cập của biến, phương thức, constructor hoặc lớp Trong java, có 4 phạm vi truy cập của Access Modifier như sau:
Trang 27Các mức truy cập trong Java
➢Để bảo vệ dữ liệu tránh bị truy nhập tự do từ bên ngoài, Java sử dụng cáctừ khoá quy định phạm vi truy nhập các thuộc tính và phương thức của lớp:
● public: Thành phần công khai, truy nhập tự do từ bên ngoài.
● protected: Thành phần được bảo vệ, được hạn chế truy nhập.
● default (không viết gì): Truy nhập trong nội bộ gói.
● private: Truy nhập trong nội bộ lớp.
Trang 28Các mức truy cập trong Java
Trang 29Các mức truy cập trong Java
Trang 30Các mức truy cập trong Java
Trang 31Các mức truy cập trong Java
Trang 32Các mức truy cập trong Java
Cùng package, khác classNoYesYesYes
Class con trong cùng package với class cha
Khác package, khác classNoNoNoYes
Class con khác package với class cha
Trang 33Lớp và đối tượng trong Java
➢Tiền tố:
○ public: có thể truy cập được từ bên ngoài lớp khai báo.
○ protected: có thể truy cập được từ lớp khai báo và các lớp dẫn xuất (lớp con). ○ private: chỉ được truy cập bên trong lớp khai báo.
○ static: phương thức lớp dùng chung cho tất cả các thể hiện của lớp, có thể được thực hiện kể cả khi không có đối tượng của lớp
○ final: không được khai báo nạp chồng ớ các lớp dẫn xuất.
○ abstract: không có phần source code, sẽ được cài đặt trong các lớp dẫn xuất. ○ synchoronized: dùng để ngăn những tác động của các đối tượngkhác lên đối
tượng đang xét trong khi đang đồng bộ hóa Dùng trong lập trình multithreads.
Trang 34Lớp và đối tượng trong Java
public voidcapnhatSV(…) {…}
public voidxemThongTinSV(){…}
…
Trang 35Lớp và đối tượng trong Java
// Tạo đối tượng mới thuộc lớp Sinhvien
Sinhvien sv = new Sinhvien();
Trang 36Lớp và đối tượng trong Java
Sinhvien sv =newSinhvien();
sv.maSv =“TH0601001”; /* Lỗi truy cập thuộc tính private từ bên ngoài lớp khai
báo */
Trang 37Lớp và đối tượng trong Java
thức đặc biệt của lớp, dùng để khởi tạo một đối tượng.
oDùngđể khởi tạo giá trị cho các thuộc tính của đối tượng.
oCùng tênvới lớp.
oKhông có giátrị trả về.
oTự động thi hành khi tạo ra đối tượng (new)
oCóthể có tham số hoặc không.
minh.
Trang 38Khai báo Constructor
Trang 39Khai báo Constructor
Trang 40Khai báo Constructor
packageconstructor;
class SinhVien {
private StringTen;
public voidIn()
public classConstructor {
publicstaticvoidmain(String[]
Trang 41Khai báo Constructor
public classConstructor {
publicstaticvoidmain(String[]
Trang 42Khai báo Constructor
public void In(){
public classConstructor {
public static voidmain(String[] args) {
Trang 43Lớp và đối tượng trong Java
thức có cùng tên nhưng khác tham số (khác kiểu dữ liệu, khác
chồng phương thức)
Trang 44Lớp và đối tượng trong Java
public class OverloadingExample {
static int add(int a, int b) {
Trang 45Lớp và đối tượng trong Java
trùng tên và trùng tham số với một phương thức của lớp cha gọi là
ghi đè phương thức.
Trang 46Lớp và đối tượng trong Java
Trang 47Lớp và đối tượng trong Java
Phương thức ghi đè ở lớp con phải có quyền truy cập bằng hoặc lớn hơn phương thức được ghi đè ở lớp cha.
Trang 48Lớp và đối tượng trong Java
Trang 49Lớp và đối tượng trong Java
được sử dụng trong khi chạy và tham khảo đến bản thân lớp chứa nó.
Trang 50Lớp và đối tượng trong Java
Trang 51Lớp và đối tượng trong Java
public class Account { // instance variable
String owner; // Account name long balance; // Balance //
// value setting method
this.owner = owner; this.balance = balance; } //
}
Trang 52Lớp và đối tượng trong Java
Trang 53Lớp và đối tượng trong Java
public class Account {
Stringname; //Account name
longbalance; //Balance
voiddisplay(){ System.out.println(…);}
void deposit (long money){ balance += money;} }
Account acc1 = newAccount(); acc1.name = “Vu T Huong Giang”; acc1.balance = “2000000”; Account acc2 = new Account(); acc2.name = “Nguyen Manh Tuan”; acc2.balance = “1000000”;
Trang 54Lớp và đối tượng trong Java
public class Account {
Stringname; //Account name
longbalance; //Balance
voiddisplay(){ System.out.println(…);}
void deposit (long money){ balance += money;} }
// Class that uses methods of Account object Account obj = newAccount();
obj.display();
obj.deposit(1000000);
Trang 55Lớp và đối tượng trong Java
Trang 57CÁC ĐẶC ĐIỂM
Trang 58Đặc điểm hướng đối tượng trong java
Trang 591 Tính đóng gói
sử dụng một cái tên để gọi.
bên trong với bên ngoài.
cập (access modifier) Ngoài ra, các lớp liên quan đến nhau có thể được gom chung lại thành package
Trang 601 Tính đóng 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)
package <tên gói>; // khai báo trước khi khai báo lớp
class <tên lớp> { …
Trang 611 Tính đóng gói
public classSinhVien {
public voidIn(){
System.out.println("Ten:");
Trang 622 Tính kế thừa
lớp đã có Xây dựng các lớp mới có sẵn các đặc tính của lớp cũ, đồng thời lớp mới có thể mở rộng các đặc tính của nó.
● Lớp kế thừa gọi là lớp con (child, subclass), lớp dẫn xuất (derived
sở (base class).
● Mối quan hệ kế thừa: Lớp con là một loại (is-a-kind-of) của lớp
cha, kế thừa các thành phần dữ liệu và các hành vi của lớp cha Có thể khai báo thêm thuộc tính, phương thức cho phù hợp với mục
Trang 632 Tính kế thừa
o Thừa hưởng các thuộc tính và phương thức đã có
o 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
Đối tượng hình học
Trang 642 Tính kế thừa
(thuộc tính), phương thức của lớp cha (public, protected, default)
Trang 652 Tính kế thừa
o Được định nghĩa trong lớp con
o Có tên,kiểu trả về & các đối số giống với phương thức của lớp cha
o Cókiểu, phạm vi truy cập không “nhỏ hơn” phương thức trong lớp cha
Trang 66classHinhVuongextendsHinhhoc {
privateint canh;
public floattinhdientich() { returncanh*canh;
Trang 682.1 Từ khóa super
classSinhVienextendsnguoi {
super(‘A’,20);}
câulệnh đầu tiên
Trang 692.2 Constructor Inheritance
○ Khai báo về thừa kế trong hàm khởi tạo
○ Chuỗi các hàm khởi tạo (Constructor Chaining)
○ Các nguyên tắc của hàm khởi tạo (Rules)
○ Triệu hồi tường minh hàm khởi tạo của lớp cha
Trang 702.2 Constructor Inheritance
loại phương thức khác.
khởi tạo của lớp cha, tiếp đó mới là hàm khởi tạo của lớp con.
Trang 722.3 Constructor Chaining
publicstaticvoidmain(String[]args) { F2 f1=newF2();}
This is constructor of Parent class This is constructor of F1 class This is constructor of F2 class
Khi tạo một thể hiện của lớp dẫn xuất, trước hếtphải gọi đến hàm khởi tạo của lớp cha, tiếp đó làhàmkhởi tạo của lớp con.
Trang 732.4 Các nguyên tắc của hàm khởi tạo
bởi trình biên dịch nếu lớp không khai báo hàm khởi tạo.
sẽ không còn được sử dụng.
lớp con, trình biên dịch sẽ tự động chèn lời gọi tới hàm khởi tạo mặc nhiên (implicity) hoặc hàm khởi tạo không tham số (explicity) của lớp cha trước khi thực thi đoạn code khác trong hàm khởi tạo lớp con.
Trang 742.4 Các nguyên tắc của hàm khởi tạo
● Có 1vấn đề?
Lỗi: Không tìm hàm khởi tạo
của lớp Parent không có tham số
Trang 752.4 Các nguyên tắc của hàm khởi tạo
Sửa: Thêm hàm khởitạo lớp Parent
Trang 762.4 Các nguyên tắc của hàm khởi tạo
● Triệu hồi tường minh hàm khởi tạo lớp cha
Trang 772.4 Các nguyên tắc của hàm khởi tạo
Trang 782.4 Các nguyên tắc của hàm khởi tạo
publicstaticvoidmain(String[] args) { F1
Kết quả:
Invoke parent default constructor Invoke F1default constructor
Trang 792.5 Ví dụ
privateString CMND;
private String Name;
privateint age;
public Person(Stringcm,Stringna,inta){ CMND=cm;
Name=na; age=a;}
public void Print(){
System.out.println("Chung minh"+"\t"+"Tên"+"\t"+"Tuoi");System.out.print(CMND+"\t"+Name+"\t"+age);
}45
Trang 802.5 Ví dụ
classEmployeeextendsPerson {
private doublesalary;
public Employee(String cm, String na, int a, double sa){
Trang 812.5 Ví dụ
classManegerextendsEmployee {
private doubleallowance;
publicManeger(Stringcm,Stringna,inta,doublesa,doubleallow){
Trang 822.5 Ví dụ
classManegerextendsEmployee {
private doubleallowance;
allow){ super(cm,na,a,sa);
Trang 832.5 Ví dụ
publicclassNhanvien {
public static void main(String[] args) {
Personp=newPerson("1234", "NGuyen Huu Đat",23);
Employeee=newEmployee("2345","Tran Ngoc Tuan", 24,10000000);
Manegermng=newManeger("3456", "Lê VănToàn",25,10000000,2000000);
System.out.println("Thong tin nguoi:");p.Print();
System.out.println();
System.out.println("Thong nhan vien:"); e.Print();
System.out.println();
System.out.print("Thong tin quan ly"); mng.Print();
}}
Trang 84Kết quả
Thong tin nguoi:
Chung minh Tên Tuoi
1234Nguyen Huu Đat 23 Thong nhan
Chung minh Tên Tuoi
2345Tran Ngoc Tuan 24Luong thang:1.0E7 Thong tin
quan lyChung minhTên Tuoi
3456Lê Văn Toàn 25Luong thang:1.0E7Phu cap:2000000.0
Trang 852.6 Từ khóa Final
➢ Biến Final - Final Variables
➢ Phương thức Final - Final Methods
➢ Lớp Final - Final Classes
Trang 862.6.1 Biến final
➢ Từ khóa “final”được sử dụng với biến để chỉ rằng giá trị của biến là hằng số.
➢ Hằng số là giá trị được gán cho biến vào thời điểm khai báo và sẽ khôngthayđổi về sau.
Trang 872.6.2 Phương thức final
➢ Được sử dụng để ngăn chặn việc ghi đè (override) hoặc che lấp (hidden)trong cáclớp Java.
➢ Phương thức được khai báo làprivatehoặc là một thành phần của lớp final thì được xem là phương thức hằng.
➢ Phương thức hằng không thể khai báo là trừu tượng (abstract).
Trang 882.6.3 Lớp Final
➢ Làlớp không có lớp con (lớp vô sinh)
➢ Hay: làlớp không có kế thừa
➢ Được sử dụng để hạn chế việc thừa kế và ngăn chặn việc sửa đổi một lớp.
Trang 893 Tính đa hình
➢ Đa hình: Cùng một phương thức có thể có những cách thi hành khác nhau
tại những thời điểm khác nhau.
➢ Trong Java, chúng tasử dụng nạp chồng phương thức (methodoverloading) và ghiđè phương thức (method overriding) để có tính đa hình
Trang 90classHinhTronextendsHinh {
public void Ve(){
System.out.println("Ve tron");}
class HinhVuongextendsHinh{
public voidVe(){
System.out.println("Ve vuong");
Trang 913 Tính đa hình
publicclass TronVuong {
public static voidmain(String[] args) { Hinh h=newHinh();
Trang 924 Tính trừu tượng
chỉ nêu tên vấn đề Đó là một quá trình che giấu các hoạt động bên
người dùng
■ Sử dụng lớp abstract ■ Sử dụng interface
Trang 934.1 Lớp trừu tượng (Abstract)
➢Làlớp đặc biệt, các phương thức chỉ được khai báo ở dạng khuôn mẫu(template) màkhông được cài đặt chi tiết.
➢Dùngđể định nghĩa các phương thức và thuộc tính chung cho các lớp con của nó.
➢Dùng từ khóa abstract để khai báo một lớp trừu tượng
➢Lớp abstract không thể tạo ra đối tượng.
Trang 944.1 Lớp trừu tượng (Abstract)
lớp Có thể khai báo các thuộc tính trong lớp trừu tượng Lớp trừu tượng có cả phương thức bình thường (regular method) và phương thức trừu tượng (abstract method).
khai báo biến thuộclớp trừu tượng để tham chiếu đến các đối tượng thuộc lớp con của nó.
những lớp con kế thừa lớp abstract này đều phải định nghĩa lại những phương thức abstract của lớp đó.
Trang 954.2 Khai báo lớp trừu tượng
➢Tính chất: mặc định làpublic,bắt buộc phải có từ khoá
➢Lưu ý: Lớp trừu tượng cũng có thể kế thừa một lớp khác,
nhưng lớp cha cũng phải là một lớp trừu tượng
Trang 964.3 Khai báo phương thức trừu tượng
➢Khai báo:
[public] abstract<kiểu dữ liệu trả về> <tên phương thức>([<các tham số>])[throws <danh sách ngoại lệ>];
➢Không khai báotường minh mặc định làpublic.
➢Tính chất của phương thức trừu tượng không được là private hay static
➢Phương thức trừu tượng chỉ được khai báo dưới dạng khuôn mẫu nênkhông cóphần dấu móc, ngoặc nhọn “{}” mà kết thúc bằng dấu chấm phẩy“;”.