chapter 2 lập trình hdt oop lập trình java

149 0 0
chapter 2 lập trình hdt oop lập trình java

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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 1

Chương 2

LẬP TRÌNH HĐTOOP

Trang 3

GIỚI THIỆU

Trang 4

Lập trình hướng đối tượng

LÀ GÌ ?

Trang 5

Giớ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 6

Giớ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 7

Giớ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 9

Giới thiệu

● Abstraction: Trừu tượng hóa ● Encapsulation: Đóng gói

● Inheritance: Kế thừa ● Polymorphism: Đa hình

Trang 10

Giới thiệu

Trang 11

Cá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 12

Cá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 13

Cá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 14

Cá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 15

Cá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 16

LỚP VÀ ĐỐI TƯỢNG TRONG JAVA

Trang 17

Lớ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 18

Lớp và đối tượng trong Java

Trang 19

Lớ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 20

Lớ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 21

Lớ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 22

Lớp và đối tượng trong Java

Khai báo lớp (class):

Trang 23

Lớ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 24

Lớ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 25

Lớp và đối tượng trong Java

Trang 26

Cá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 27

Cá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 28

Các mức truy cập trong Java

Trang 29

Các mức truy cập trong Java

Trang 30

Các mức truy cập trong Java

Trang 31

Các mức truy cập trong Java

Trang 32

Cá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 33

Lớ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 34

Lớp và đối tượng trong Java

public voidcapnhatSV(…) {…}

public voidxemThongTinSV(){…}

Trang 35

Lớp và đối tượng trong Java

// Tạo đối tượng mới thuộc lớp Sinhvien

Sinhvien sv = new Sinhvien();

Trang 36

Lớ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 37

Lớ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 38

Khai báo Constructor

Trang 39

Khai báo Constructor

Trang 40

Khai báo Constructor

packageconstructor;

class SinhVien {

private StringTen;

public voidIn()

public classConstructor {

publicstaticvoidmain(String[]

Trang 41

Khai báo Constructor

public classConstructor {

publicstaticvoidmain(String[]

Trang 42

Khai báo Constructor

public void In(){

public classConstructor {

public static voidmain(String[] args) {

Trang 43

Lớ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 44

Lớp và đối tượng trong Java

public class OverloadingExample {

static int add(int a, int b) {

Trang 45

Lớ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 46

Lớp và đối tượng trong Java

Trang 47

Lớ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 48

Lớp và đối tượng trong Java

Trang 49

Lớ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 50

Lớp và đối tượng trong Java

Trang 51

Lớ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 52

Lớp và đối tượng trong Java

Trang 53

Lớ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 54

Lớ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 55

Lớp và đối tượng trong Java

Trang 57

CÁC ĐẶC ĐIỂM

Trang 58

Đặc điểm hướng đối tượng trong java

Trang 59

1 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 60

1 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 61

1 Tính đóng gói

public classSinhVien {

public voidIn(){

System.out.println("Ten:");

Trang 62

2 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 63

2 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 64

2 Tính kế thừa

(thuộc tính), phương thức của lớp cha (public, protected, default)

Trang 65

2 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 66

classHinhVuongextendsHinhhoc {

privateint canh;

public floattinhdientich() { returncanh*canh;

Trang 68

2.1 Từ khóa super

classSinhVienextendsnguoi {

super(‘A’,20);}

câulệnh đầu tiên

Trang 69

2.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 70

2.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 72

2.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 73

2.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 74

2.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 75

2.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 76

2.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 77

2.4 Các nguyên tắc của hàm khởi tạo

Trang 78

2.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 79

2.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 80

2.5 Ví dụ

classEmployeeextendsPerson {

private doublesalary;

public Employee(String cm, String na, int a, double sa){

Trang 81

2.5 Ví dụ

classManegerextendsEmployee {

private doubleallowance;

publicManeger(Stringcm,Stringna,inta,doublesa,doubleallow){

Trang 82

2.5 Ví dụ

classManegerextendsEmployee {

private doubleallowance;

allow){ super(cm,na,a,sa);

Trang 83

2.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 84

Kế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 85

2.6 Từ khóa Final

➢ Biến Final - Final Variables

➢ Phương thức Final - Final Methods

➢ Lớp Final - Final Classes

Trang 86

2.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 87

2.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 88

2.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 89

3 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 90

classHinhTronextendsHinh {

public void Ve(){

System.out.println("Ve tron");}

class HinhVuongextendsHinh{

public voidVe(){

System.out.println("Ve vuong");

Trang 91

3 Tính đa hình

publicclass TronVuong {

public static voidmain(String[] args) { Hinh h=newHinh();

Trang 92

4 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 93

4.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 94

4.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 95

4.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 96

4.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“;”.

Ngày đăng: 27/04/2024, 10:57

Tài liệu cùng người dùng

Tài liệu liên quan