1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Nguyên lý ngôn ngữ lập trình - Chương 6: Ngôn ngữ lập trình hướng đối tượng

38 10 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 38
Dung lượng 184,07 KB

Nội dung

Bài giảng Nguyên lý ngôn ngữ lập trình - Chương 6: Ngôn ngữ lập trình hướng đối tượng trình bày về khái niệm về trừu tượng hóa, trừu tượng hóa dữ liệu, sự dóng gói, tính thừa kế, một số ngôn ngữ lập trình hướng đối tượng.

Trang 1

Ch ươ ng 6: Ngôn ng ữ l ậ p trình h ướ ng ñố i t ượ ng

Giảng viên: Ph.D Nguyễn Văn Hòa Khoa KT-CN-MT – ðH An Giang

Trang 2

N ộ i dung chính c ủ a ch ươ ng

Trang 3

S ự phát tri ể n k ỹ thu ậ t l ậ p trình

 Tạo ra sản phẩm tốt bằng một cách có hiệu quả

 Nắm bắt ñược công nghệ

 Hệ ñiều hành (Unix, Windows) : hàng chục triệu dòng lệnh

 Người dùng ngày càng ñòi hỏi nhiều chức năng

 Phần mềm luôn cần ñược sữa ñổi

Trang 4

Vì v ậ y

 Chi phí phát triển

 Chi phí bảo trì

 Giảm chi phí và thời gian phát triển

 Nâng cao chất lượng

Trang 5

ðể s ử d ụ ng l ạ i code (mã ngu ồ n)

 Không yêu cầu thay ñổi khi sử dụng trong chương trình mới

Trang 6

Gi ả i pháp: LT h ướ ng ñố i t ượ ng

class MyDate {

private int year, mon, day;

public int getDay() { }

public boolean setDay(int) { }

}

Trang 8

T ạ i sao ti ế p c ậ n h ướ ng ñố i t ượ ng

 Dữ liệu ñược xem như một phần tử chính yếu và ñược bảo vệ

 Hàm gắn kết với dữ liệu, thao tác trên dữ liệu

 Phân tách bài toán thành nhiều thực thể (ñối tượng) 

xây dựng dữ liệu + hàm cho các ñối tượng này

Trang 9

ðặ c ñ i ể m c ủ a OOP

xuất từ các hàm bên ngoài

Trang 10

Ư u ñ i ể m c ủ a OOP

 So với các tiếp cận cổ ñiển thì OOP có

những thuận lợi sau:

 OOP cung cấp một cấu trúc module rõ ràng

 OOP giúp lập trình viên duy trì mã và sửa ñổi mã tồn tại dễ dàng (các ñối tượng ñược tạo ra với những khác nhau nhỏ so với những ñối tượng tồn tại)

 OOP cung cấp một framework tốt với các thư viện mã

mà các thành phần có thể ñược chọn và sửa ñổi bởi lập trình viên

Trang 11

Tr ừ u t ượ ng hóa

cần thiết của vấn ñề

(và trong khoa học máy tính)

hóa tiến trình bằng chương trình con

ñể hỗ trợ trừu tượng hóa dữ liệu

Trang 13

Các k ỹ thu ậ t tr ừ u t ượ ng

 đóng gói (encapsulation)

Trang 14

Tr ừ u t ượ ng hóa d ữ li ệ u

ñịnh nghĩa thỏa mãn 2 ñiều kiện sau:

 Khai báo kiểu và các hành ñộng ñối với ñối tượng của kiểu → cung cấp một giao diện của kiểu

 Kiểu của ñối tượng thì ñược giấu ñi ñối với bên ngoài, cho nên các hành ñộng có thể ñược cung cấp trong

phần ñịnh nghĩa kiểu

Trang 15

Che d ấ u thông tin

Trang 16

Ngôn ng ữ C++

67

viên

là hàm thành viên

thức, nhưng mỗi thực thể thì có dữ liệu riêng

Trang 18

~stack () {delete [] stackPtr;};

void push (int num) {…};

void pop () {…};

int top () {…};

int empty () {…};

Trang 19

 Tương tự C++, chỉ trừ:

 Tất cả các kiểu do người dùng ñịnh nghĩa ñều là

lớp (Java không có structs, union)

 Tất cả các ñối tượng ñược cấp phát vùng nhớ từ

Heap và ñược truy cập bằng tham chiếu biến

 Từng hàm và biến trong lớp ñều có gán quyền truy

cập (private or public) khi khai báo

 Java có cơ chế phạm vi thứ hai, phạm vi của gói

(package scope), VD

import com.acme.utils.AcmeIO;

Trang 20

Ngôn ng ữ Java

class StackClass {

private int [] *stackRef;

private int [] maxLen, topIndex;

public StackClass() { // a constructor

stackRef = new int [100];

maxLen = 99;

topPtr = -1;

};

public void push (int num) {…};

public void pop () {…};

public int top () {…};

public boolean empty () {…};

}

Trang 21

Ngôn ng ữ C#

 Dựa trên C++ và Java

 Bổ sung hai quyền truy cập, internal và protected

internal

 Toàn bộ các thực thể lớp ñều là Heap dynamic

 Hàm xây dựng mặc ñịnh ñều có sẵn trong các lớp

 Khởi tao giá trị mặc ñịnh 0 cho int và false cho boolean

 Vì garbage collection ñược dùng trong hầu

hết các heap objects nên hàm hủy ít khi ñược dùng

 struct là hình thức ñơn giản của class nên không hỗ trợ thừa kế

Trang 22

Ngôn ng ữ C# (tt)

cung cấp phương thức getter và setter

là cách cài ñặt phương thức getters và setters

mà không yêu cầu phương thức gọi hàm tường minh

dữ liệu riêng (private)

Trang 23

Ngôn ng ữ C#: Property

public class Weather {

public int DegreeDays { //** DegreeDays is a property

get {return degreeDays;}

set {degreeDays = value;}

Weather w = new Weather();

int degreeDaysToday, oldDegreeDays;

w.DegreeDays = degreeDaysToday;

oldDegreeDays = w.DegreeDays;

Trang 24

S ự ñ óng g ố i trong C / C++

 C

 Không hỗ trợ trù tượng hóa dữ liệu

 Tập tin chứa một hoặc nhiều chương trình con có thể

ñược biên dịch một cách ñộc lập

 Giao diện (interface) ñược dặt trong header file (.h)

 Header file ñược chèn vào codeSource bằng

Trang 25

Class Matrix{ //** The class definition

friend Vector multiply(const Matrix&,const Vector&);

Trang 26

C# Assemblies

 Tập hợp các files vào trong một thư viện liên kết ñộng

DLL (dynamic link library) hoặc file thực thi

(executable)

 Mỗi file có một module ñược biên dịch ñộc lập

 Một DLL là tập hợp các lớp và phương thức ñược liên kết một chương trình thực thi

 C# có cơ chế thay ñổi quyền truy xuất, internal; một thành viên internal của lớp thì ñược truy xuất bởi tất

cả các lớp trong assembly mà nó xuất hiện

Trang 28

Contact* Recent (void);

Contact* Find (const char *name);

Trang 29

Hàm xây d ự ng và hàm h ủ y

 Trong thừa kế, khi khởi tạo ñối tượng:

 Hàm xây dựng của lớp cha sẽ ñược gọi trước

 Sau ñó mới là hàm xây dựng của lớp con.

 Trong thừa kế, khi hủy bỏ ñối tượng:

 Hàm hủy của lớp con sẽ ñược gọi trước

 Sau ñó mới là hàm hủy của lớp cha.

Ch ươ ng 9

A

B

Trang 30

G ọ i hàm xây d ự ng

Trang 31

Thành viên l ớ p ñượ c b ả o v ệ

 Thừa kế:

 Có tất cả các dữ liệu và hàm thành viên.

 Không ñược truy xuất ñến thành viên private.

 Thuộc tính truy cập protected:

 Cho phép lớp con truy xuất.

Ch ươ ng 9

class ContactDir {

//

protected:

int Lookup (const char *name);

Contact **contacts; // ds cac doi tac

int dirSize; // kich thuoc hien tai

class Foo { public:

// cac thanh vien chung

Trang 32

protected

protected private

public

public

_ _

Trang 33

Window (Rect &);

~Window (void); //

Menu object

OptionList data members

Window data members

class OptionList { public:

OptionList (int n);

~OptionList ();

//

};

Trang 34

Ư u khuy ế t ự i ể m c ủ a ự a th ừ a k ế

 Tạo sự phức tạp trong NN và trong cài ựặt (sự mơ hồ:

sự phức tạp của các quan hệ thừa kế)

 đôi khi không hiệu quả - chi phắ liên kết ựộng tăng lên

với ựa thừa kế

 Ưu ựiểm

 Trong vài trường hợp ựa thừa kế rất tiện lợi

Trang 36

Th ừ a k ế trong Java

Trang 37

Th ừ a k ế trong Java (tt)

public interface Human {

final String GENDER_MALE = "MALE";

final String GENDER_FEMALE = "FEMALE";

void move(); void talk();

}

public abstract class Person implements Human {

protected int age = 0;

protected String firstname = "firstname";

protected String lastname = "lastname";

protected String gender = Human.GENDER_MALE;

protected int progress = 0;

public void move() { this.progress++; }

Ngày đăng: 08/05/2021, 19:41

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w