Khái niệm về thiết kế hướng đối tượng

Một phần của tài liệu Tài liệu lập trình hướng đối tượng Java căn bảnOOP (Trang 45 - 69)

Giảng viên: Vũ Duy Linh Email: vdlinh@ctu.edu.vn

46

© Vũ Duy Linh Các mẫu hình lập trình

 Mẫu hình lập trình tuần tự (Imperative paradigm)

 Mẫu hình lập trình mô tả (Declarative paradigm)

 Lập trình hàm (Functional programming)

 Lập trình logic (Logic programming )

 Mẫu hình lập trình hướng đối tượng (Object-oriented paradigm)

 Mẫu hình lập trình hướng định dạng/khía cạnh (Aspect-oriented paradigm)

47

© Vũ Duy Linh Mô hình lập trình tuần tự

 Phục vụ cho thời kỳ đầu máy tính và ngôn ngữ asembler

 Cách làm tuần tự từng bước (step- by-step) để cụ thể hóa bài toán được làm như thế nào (how to get sth)

 Các biến được đại diện trong bộ nhớ

 Sử dụng lệnh gán để thay đổi trị biến

 Các ngôn ngữ tiêu biểu: Algol, Pascal, C, Ada

procedure Fibo(n: integer);

var a, b, kq: integer;

begin

a := 0; b:=1;kq:=0;

while (kq < n) do begin

kq := q + b; write(kq:4);

a = b; b = kq;

end;

end;

48

© Vũ Duy Linh

 Declarative programming: Để miêu tả bài toán cần giải quyết được định nghĩa như thế nào.

 Nó dựa trên cách lập trình định nghĩa hàm (definition-based functional programming):

 Lập trình hàm (Functional programing)

 Lập trình logic (Logic programing)

 Lập trình hàm:

 Ước lượng các hàm toán học

 Không làm thay đổi dữ liệu

 Chương trình chính là một tập các hàm

 Các ngôn ngữ tiêu biểu: Lisp, Refal, Perl, Planer,…

 Lập trình logic:

 Xác định kết suy diễn của bài toán là thành công hay thất bại

 Dựa vào một tập các phép logic được định nghĩa: các sự kiện/tiên đề, các luật logic

 Các nguyên lý hợp nhất (Unification), nguyên lý giải (Resolution)

 Ngôn ngữ tiêu biểu: Prolog

(+ x y) x + y

Mô hình lập trình mô tả

49

© Vũ Duy Linh Mô hình lập trình mô tả (2)

 Ngôn ngữ LISP

 (max 3 10 -10 15 7)  15

 (defun factorial (N)

"Compute the factorial of N."

(if (<= N 1) 1

(* N (factorial (- N 1)))))

Bài toán n! được định nghĩa là:

“bằng 1 nếu n <=1 ngược lại bằng n*(n-1)!

Bài toán n! được định nghĩa theo cú pháp Prolog.

 Ngôn ngữ Prolog

mortal(X) :- human(X).

human(socrate).

?- mortal(socrate).

 Yes, Sorate is mortal.

fac(0,1).

fac(N,F) :- N>0, M is N-1, fac(M, Fm), F is N * Fm.

50

© Vũ Duy Linh Mô hình lập trình hướng đối tượng

 Dựa trên nền tảng đối tượng (Object)

 Chương trình bao gồm nhiều tập quần thể đối

tượng khác nhau, mỗi quần thể đối tượng thuộc vào một loài/ loại/ lớp (Class) riêng biệt.

 Sự thực thi chương trình là sự trao đổi thông điệp

(messages) giữa các đối tượng với nhau.

 thuần OOP: Mọi thứ là đối tượng ngay cả các kiểu nguyên thủy (primitives)

 Ngôn ngữ thuần OOP:

Smalltalk, Eiffel.

1 lớp Xe

4 chiếc xe 4 đối tượng thuộc lớp Xe

51

© Vũ Duy Linh Kết hợp các mô hình

 Ngôn ngữ lập trình hiện đại thường có sự kết hợp giữa các mô hình:

 Imperative + OO Paradigms: C++, Java, Object Pascal, Ada

 Fuctional + OO Paradigms: Clos (Common Lisp Object System)

 Logic + OO Paradigms: Object Prolog

52

© Vũ Duy Linh Quá trình phát triển chương trình HĐT

1. Đặc tả bài toán  2. Phân rã bài toán  3. Phân tích các thực thể tồn tại trong bài toán (Trừu tượng hoá)  4. Viết mã lệnh Java  5. Kiểm thử

6. Chỉnh sửa lại.

1

2

3

4

5

6

53

© Vũ Duy Linh Sự ánh xạ thế giới thực vào OOP

- Được hực hiện thông qua sự trừu tượng hóa.

- Sự trừu tượng hóa: là quá trình xác định các thuộc tính và các hành động liên quan đến mỗi thực thể trong môi trường ứng dụng đang được phát triển (có nhiều đối tượng thuộc các loại khác nhau).

54

© Vũ Duy Linh Sự trừu tượng hóa - Abstraction

Trừu tượng dữ liệu ( Data abstraction): là các đặc tính (properties) của kiểu dữ liệu và sự cài đặt cụ thể nó  Định nghĩa kiểu dữ liệu (thực thể) ở mức trừu tượng interface và cài đặt nó ở mức cụ thể.

Phép tính a = (1+2) * 5 được thức hiện như thế nào trên máy tính, dễ hay khó?

Abstract properties

Sự trừu tượng hoá điều khiển ( Control abstraction): Là sự trừu tượng các thao tác/

phép toán ở mức thấp. Các ngôn ngữ lập trình đã làm sẵn việc này, giúp giảm bớt công sức của lập trình viên.

Rất đơn giản nếu sử dụng NNLT bậc cao, “mệt” nếu sử dụng ngôn ngữ máy (Machine language)

Tính toán, xử lý ntn để có kết quả a = 15?

55

© Vũ Duy Linh Sự trừu tượng hóa - Abstraction

Class (kiểu dữ liệu thực thể): Là sự kết hợp của data abstraction + Control abstraction

56

© Vũ Duy Linh Các đặc tính Java hướng đối tượng

Java OOP

Paradigm

Encapsulation

Multiple Inheritance

Delegation Concurrency Polymorphism Single Inheritance

Abstraction

Persistence

Genericity

57

© Vũ Duy Linh Sự đóng gói - Encapsulation

Sự đóng gói: Là việc cài đặt mã lệnh cho các phương thức nội tại và cách thức truy xuất các thuộc tính của lớp thành một đơn vị duy nhất  Cung cấp một cơ chế bảo vệ dữ liệu (đối tượng): che dấu và bảo vệ dữ liệu khỏi người dùng (can thiệp hoặc thao tác sai mục đích).

Outside code: Phần nhìn thấy cho người dùng Inside code: Phần che

khuất khỏi người dùng

58

© Vũ Duy Linh Sự trừu tượng - Abstraction

 OOP sử dụng cả data và control abstraction.

 Abstraction  Class: tập các thuộc tính và thao tác (phương thức).

 Lớp GiangVien: có 3 thuộc tính và 2 phương thức.

3 Attributes

2 Operations

V V

59

© Vũ Duy Linh Thừa kế- Inheritance

Thừa kế (Inheritance): Là một cơ chế cho phép lập trình viên định nghĩa một lớp con mới (Child/ sub/ derived class) bằng cách mở rộng từ (các) lớp cha (Parent/ super/

base class) đã tồn tại. Đây là đặc tính nổ bật nhất của OOP và là một cuộc cách mạng của lĩnh vực công nghệ phần mềm.

 Lớp con thừa hưởng các đặc điểm

(properties = attribute + operations) từ lớp cha trong phạm vi truy xuất được phép.

 Quá trình phân tích tìm các lớp con dẫn

xuất từ lớp cha được gọi là chuyên biệt hoá (Specialization).

Parent

Child

Phần chung:

- Được kế thừa - Có thể reused vì không cài đặt lại

60

© Vũ Duy Linh Thừa kế

 Chuyên biệt hoá là quá trình phân lớp quần thể các đối tượng chung của lớp cha ra thành những lớp quần thể con nhỏ hơn (có chung đặc tính) của các lớp con khác nhau  phương pháp lập trình top-down.

 Mối liên kết giữa lớp con và lớp cha là mối liên kết Là-Một (Is-A) của lớp cha.

c à n g

tổng quát (trừu tượng)

chuyên biệt (cụ thể)

Ex: Nguoi Is-A DongVatCoVu: “Người là một loài động vật có vú”,…

61

© Vũ Duy Linh Các loại thừa kế lớp trong Java

 Các dạng thừa kế trong lập trình hướng đối tượng Java là:

 Thừa kế đơn (Single inheritance): Một con  một cha

 Thừa kế phân cấp (Hierarchical inheritance): Nhiều con  một cha

 Thừa kế đa cấp (Multi-level inheritance): Là dạng Thừa kế

Hierarchical nhưng cho phép nhiều cấp (như: chắtkj  cháuji  coni  cha)

Hierarchical inheritance

Single

inheritance Multi-level

inheritance

62

© Vũ Duy Linh Các loại thừa kế lớp ngoài Java

 Thừa kế bội (Multiple inheritance): Một con thừa kế từ nhiều cha. VD: C++

 Thừa kế lai (Hybrid inheritance): Là sự kết hợp 2 trong 4 cách trên

 Thừa kế đa lối (Multi-path inheritance): Giống như dạng Hybird nhưng được dẫn xuất cùng một lớp cha (base class).

Q & A

63

© Vũ Duy Linh Tính đa hình

Đa hình (Polymorphism): Là khả năng đảm nhận nhiều dạng - Một hoạt động (thông qua phương thức) được đối tượng thực hiện bằng nhiều cách khác nhau, và các đối tượng khác loại cùng thực hiện chung một ứng xử theo cách riêng của mình.

 Giúp cho chương trình trở nên tổng quát hơn chứ không đơn điệu cá biệt

Có 2 hình thức đa hình:

1. Đa hình tĩnh (Static polymorphism):

được thực hiện thông qua phương pháp nạp chồng (overloading) ở thời điểm biên dịch chương trình (early binding)  Đa hình phương thức.

 Biên dịch thành byte-code vì biết rõ phương thức nào sẽ được thực thi

2. Đa hình động (Dynamic polymorphism):

được thực hiện thông qua phương pháp ghi chồng (overriding) ở thời điểm thực thi chương trình (late binding)  Đa hình đối tượng.

 Chỉ xác định được phương thức nào được thực hiện ở thời điểm thực thi

64

© Vũ Duy Linh Tính bền vững

Tính bền vững (Persistence): Mục đích lưu giữ sự tồn tại của đối tượng lâu hơn sự thực thi của chương trình.

 Với Native Java persistence bằng tuần tự hoá:

Bằng cách ghi đối tượng vào nơi an toàn (không bị xung đột) rồi sau đó đọc ra để sử dụng lại các thư viện hỗ trợ:

java.io.FileInputStream; java.io.FileOutputStream;

java.io.ObjectInputStream; java.io.ObjectOutputStream;

Cơ chế để đảm bảo sự bền vững là sự tuần tự hóa (serialization) -

java.io.Serializable;: Nó chuyển đổi dữ liệu (đối tượng) vào luồng (byte stream) và ghi nó vào tập tin (CSDL, bộ nhớ) để lưu trữ - sử dụng phương thức writeObject(). Chương trình sẽ được java bean khôi phục lại bằng cơ chế deserialization để có được trạng thái ban đầu của đối tượng - sử dụng phương thức readObject().

65

© Vũ Duy Linh Tính bền vững CSDL trong Java - Persistence database

Với các framework hỗ trợ persistence: JPO/OpenJPA, TopLink, EclipseLink, Hibernate,…

và với JPA trong Java EE, và Java Data

Objects (JDO API) của Cộng đồng Java (Java Community Process):

66

© Vũ Duy Linh Đồng bộ hóa, sự ủy quyền

Đồng bộ hóa (Concurrency): Là cơ chế cho phép thực hiện nhiều chức năng/công việc tại một thời điểm. VD như hệ điều hành đa nhiệm - Java thực hiện thông qua cơ chế tiến trình (processes) và tuyến đoạn (threads) và tuần tự hoá

(synchronization). Java API là gói java.util.concurrent;

Sự ủy quyền (Delegation): Cho phép một phương thức

method_A của lớp A thực hiện một nhiệm vụ thông qua một phương thức method_B ở lớp B.

Point xCoord yCoord getXCoord() getYCoord() Circle

centre

getCentreX() getCentreY()

Phương thức getCenterX() của đối tượng lớp Circle thực hiện tính xCord của tâm hình tròn thông qua phương thức getXCoord thuộc đối tượng lớp Point

67

© Vũ Duy Linh Kỹ thuật tổng quát

 Kỹ thuật Generic: Cho phép sự trừu tượng hóa các phần tử dữ liệu mà không cụ thể chính xác kiểu của chúng. Các kiểu tổng quát

(chưa biết) này chỉ được xác định ở thời điểm sử dụng chúng.

E là tham số hình thức có kiểu tổng quát ở thời điểm định nghĩa.

Khi sử dụng List<Integer> thì E được thay thế bằng kiểu của đối số thực (là Integer)

68

© Vũ Duy Linh Lợi ích của OOP

 Sự tin cậy cao hơn: Phân các dự án phần mềm phức tạp thành các mô đun các đối tượng nhỏ hơn (Package)

 Khả năng bảo trì phần mềm: Với các gói nhỏ (mô-đun) sẽ giúp dễ phát hiện lỗi và sửa lỗi hơn

 Năng suất cao hơn thông qua tính sử dụng lại (Reused)

 Inheritance: Làm giảm bớt sự dư thừa mã lệnh, mở rộng việc sử dụng các class đang tồn tại

 Encapsulation: Giúp cho xây dựng chương trình an toàn hơn.

 OOP dễ dàng ánh xạ các đối tượng trong miền xác định của bài toán tới các đối tượng trong chương trình

 Những hệ thống hướng đối tượng có thể được nâng cấp từ hệ thống nhỏ sang lớn dễ dàng.

Một phần của tài liệu Tài liệu lập trình hướng đối tượng Java căn bảnOOP (Trang 45 - 69)

Tải bản đầy đủ (PDF)

(238 trang)