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ĐT
OOP
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ập trình hướng cấu trúc’ (structured programming) Nó xác định những chức năng chính củ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ông tin 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ết các phương thức thao tác trên dữ liệu, việc này được xem như là phần thừa
kế của việc định nghĩa dữ liệu.
Trang 8Giới thiệu
Phương pháp Top-Down OOP
Chúng ta sẽ xây dựng một khách sạn.
Chúng ta sẽ xây dựng một tòa nhà 10 tầng với những dãy có các phòng trung bình, có các phòng sang trọng, và một phòng họp lớn.
Chúng ta sẽ thiết kế các tầng lầu, các phòng và phòng họp.
Chúng ta sẽ xây dựng một khách sạn với những thành phần trên.
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 trongthực tế
học…
➢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 vitươ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
Sinhviên
○ 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ác
từ 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
Private Default Protected Public
Cùng package, khác class No Yes Yes Yes
Class con trong cùng package với class cha
Khác package, khác class No No No Yes
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
Sinhvien(){}
Sinhvien (…) { …}
… // Danh sách các phương thức
public void capnhatSV (…) {…}
public void xemThongTinSV() {…}
…
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 = new Sinhvien();
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ên vớ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
Ví dụ 2:
class Sinhvien{
… // không có constructor mặc định // constructor có đối số
// constructor có đối số Sinhvien(<các đối số>) {…}
}
…
Sinhvien sv =new Sinhvien();
//Hoặc Sinhvien sv = new Sinhvien (<các đối số>);
Trang 40Khai báo Constructor
package constructor;
class SinhVien {
private String Ten;
public void In() {
System out println("Ten:"+Ten);
} }
package constructor;
public class Constructor {
public static void main(String[]
args) { SinhVien s= new SinhVien();
s.In();
} }
Ten:null
Trang 41Khai báo Constructor
package constructor;
class SinhVien {
private String Ten; public
SinhVien() {
Ten="Nguyen Van Tung";
Ten:Nguyen Van Tung
package constructor;
public class Constructor {
public static void main(String[]
args) { SinhVien s= new SinhVien();
s.In();
} }
Trang 42Khai báo Constructor
p ublic void In(){
System out println("Ten:"+Ten);
package constructor;
public class Constructor {
public static void main(String[] args) {
s= new SinhVien(“Anh SinhVien
Thu”);
s.In();
} }
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
class Animal {
void eat() { System.out.println("eating ");
} }
class Dog extends Animal {
void eat() { System.out.println("eating bread ");
}
Trang 47Lớp và đối tượng trong Java
Đa hình Thể hiện tính đa hình tại run time Thể hiện tính đa hình tại
compile time.
Danh sách tham số
Danh sách tham số phải giống nhau Danh sách tham số có
thể khác nhau.
Quyền truy cập
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.
Các phương thức nạp chồng có thể có quyền truy cập khác nhau.
Giá trị trả về Kiểu trả về bắt buộc phải giống nhau Kiểu trả về có thể khác
nhau.
Phạm vi Xảy ra giữa 2 class có quan hệ kế Xảy ra trong phạm vi
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 {
String name; //Account name
long balance; //Balance
void display(){ System.out.println(…);
Trang 54Lớp và đối tượng trong Java
public class Account {
String name; //Account name
long balance; //Balance
void display(){ System.out.println(…);
}
void deposit (long money){ balance += money;
} }
// Class that uses methods of Account object
Account obj = new Account();
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
package VD1;
public class SinhVien {
public void In(){
System out println("Ten:");
} }
SinhVien();
sv.In();
} }
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 66class HinhVuong extends Hinhhoc {
private int canh;
public float tinhdientich() { return canh*canh;
Trang 67là public
Trang 682.1 Từ khóa super
class SinhVien extends nguoi {
public void show(){
System.out.println(“ ”);
super (‘A’,20);
}
câu lệ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 71class F1 extends Parent{
public F1() { System out println("This is constructor of F1 class");
} }
Trang 72Khi tạo một thể hiện của lớp dẫn xuất, trước hết phải gọi đến hàm khởi tạo của lớp cha, tiếp đó là hàm khở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ó 1 vấ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ởi tạ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
public static void main(String[] args) { F1
Trang 792.5 Ví dụ
class Person {
private String CMND;
private String Name;
private int age;
public Person( String cm, String na, int a){
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ụ
class Employee extends Person {
private double salary;
public Employee( String cm, String na, int a, double sa){
Trang 812.5 Ví dụ
class Maneger extends Employee {
private double allowance;
public Maneger( String cm, String na, int a, double sa, double allow){
Trang 822.5 Ví dụ
class Maneger extends Employee {
private double allowance;
public Maneger( String cm, String na, int a, double sa, double
allow){ super (cm,na,a,sa);
Trang 832.5 Ví dụ
public class Nhanvien { public static void main(String[] args) {
Person p= new Person("1234", "NGuyen Huu Đat",23);
Employee e= new Employee("2345","Tran Ngoc Tuan", 24,10000000);
Maneger mng= new Maneger("3456", "Lê Văn Toà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
1234 Nguyen Huu Đat 23 Thong nhan
vien:
Chung minh Tên Tuoi
2345 Tran Ngoc Tuan 24Luong thang:1.0E7 Thong tin
quan lyChung minh Tên Tuoi
3456 Lê 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 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ác lớp Java.
➢ Phương thức được khai báo là private hoặ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.