1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Lập Trình Hướng Đối Tượng (Object-oriented Programming) 1 pot

10 179 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 430,06 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGBộ môn Công nghệ phần mềm Khoa Công Nghệ Thông Tin Đại Học Bách khoa – Đại học Đà Nẵng CHƯƠNG 1 18/02/2009 Lập Trình Hướng Đối Tượng Object-oriented Programming

Trang 1

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Bộ môn Công nghệ phần mềm

Khoa Công Nghệ Thông Tin

Đại Học Bách khoa – Đại học Đà Nẵng CHƯƠNG

1

18/02/2009

Lập Trình Hướng Đối Tượng (Object-oriented Programming)

„ Mục tiêu …Giới thiệu những khái niệm cơ bản trong lập trình hướng đối tượng

„ Nội dung …Trừu tượng hóa, đối tượng, lớp

…Thuộc tính và phương thức

…Thông điệp và truyền thông điệp

…Tính bao gói, tính kế thừa, tính đa hình

18/02/2009

Khái Niệm

„ Lập trình hướng đối tượng (OOP-

Object-Oriented Programming)

… một cách tư duy mới, tiếp cận hướng đối tượng để

giải quyết vấn đề bằng máy tính

… một phương pháp thiết kế và phát triển phần mềm

dựa trên kiến trúc lớp và đối tượng

„ Quá trình tiến hóa của OOP

1. Lập trình tuyến tính

2. Lập trình có cấu trúc

3. Sự trừu tượng hóa dữ liệu

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

18/02/2009

Lập trình không có cấu trúc (non-structured programming)

„ Là phương pháp xuất hiện đầu tiên

…các ngôn ngữ như Assembly, Basic

…sử dụng các biến tổng thể …lạm dụng lệnh GOTO

„ Các nhược điểm

…khó hiểu, khó bảo trì, hầu như không thể sử dụng lại …chất lượng kém

…chi phí cao …không thể phát triển các ứng dụng lớn

Trang 2

Lập trình không có cấu trúc

(non-structured programming)

„ Đoạn trình trên khó theo dõi, khó hiểu, dễ gây lỗi,

khó sửa đổi

10 k=1

20 gosub 100

30 if y > 120 goto 60

40 k = k + 1

50 goto 20

60 print k, y

70 stop

100 y = 3*k*k + 7*k - 3

110 return

Lệnh nhảy đến vị trí bất

kỳ trong chương trình

18/02/2009

L ậ p trình có c ấ u trúc/l ậ p trình th ủ t ụ c

(structured/procedural programming)

„ sử dụng các lệnh có cấu trúc: for, do while, if then else

„ các ngôn ngữ: Pascal, C,

„ chương trình là tập các hàm/thủ tục

„ Mã chương trình tập trung thể hiện thuật toán:

làm như thế nào.

„ Ưu điểm

…chương trình được cục bộ hóa, do đó dễ hiểu, dễ bảo trì hơn

…dễ dàng tạo ra các thư viện phần mềm

18/02/2009

Ví dụ

int func(int j)

{

return (3*j*j + 7*j-3);

}

int main()

{

int k = 1

while (func(k) < 120)

k++;

printf("%d\t%d\n", k, func(k));

return(0);

}

18/02/2009

Lập trình có cấu trúc/lập trình thủ tục

„ Nhược điểm

…dữ liệu và mã xử lý là tách rời

…dữ liệu thụ động, xử lý chủ động …khó đảm bảo tính đúng đắn của dữ liệu …không tự động khởi tạo hay giải phóng dữ liệu động …không đảm bảo được tính nhất quán và các ràng buộc của dữ liệu

…khó cấm mã ứng dụng sửa dữ liệu của thư viện …khó bảo trì code

„ phần xử lý có thể nằm rải rác

„ người lập trình phải biết cấu trúc dữ liệu (vấn đề này một thời gian dài được coi là hiển nhiên)

„ khi thay đổi cấu trúc dữ liệu thì mã xử lý (thuật toán) phải thay đổi theo

Trang 3

Ví dụ

struct Date

{

int day;

int month;

int year;

};

void setDate(Date& date, int newDay, int newMonth,

int newYear) {

date.day = newDay;

}

Chuyện gì xảy ra nếu các đối số

newDay, newMonth, newYear

tạo thành ngày tháng năm không hợp lệ?

18/02/2009

Tại sao phải thay đổi cấu trúc dữ liệu?

„ Cấu trúc dữ liệu là mô hình của bài toán cần giải quyết

…Do thiếu kiến thức về bài toán, về miền ứng dụng , không phải lúc nào cũng tạo được cấu trúc dữ liệu hoàn thiện ngay từ đầu

…Tạo ra một cấu trúc dữ liệu hợp lý luôn là vấn đề đau đầu của người lập trình

„ Bản thân bài toán cũng không bất biến

…Cần phải thay đổi cấu trúc dữ liệu để phù hợp với các yêu cầu thay đổi

18/02/2009

Các vấn đề

„ Thay đổi cấu trúc

…dẫn đến việc sửa lại mã chương trình (thuật toán)

tương ứng và làm chi phí phát triển tăng cao

…không tái sử dụng được các mã xử lý ứng với cấu

trúc dữ liệu cũ

„ Đảm bảo tính đúng đắn của dữ liệu

…một trong những nguyên nhân chính gây ra lỗi phần

mềm là gán các dữ liệu không hợp lệ

…cần phải kiểm tra tính đúng đắn của dữ liệu mỗi khi

thay đổi giá trị

18/02/2009

Ví dụ: MyDate

struct Date { int year, month, day;

};

Date d;

d.day = 32; // invalid day

d.day = 31; d.month = 2; // how to check

d.day = d.day + 1; //

Trang 4

Ví dụ: MyDate (2)

Thay đổi cấu trúc dữ liệu:

struct Date {

short year;

short mon_n_day;

};

18/02/2009

Giải pháp

„ Che dấu dữ liệu (che dấu cấu trúc)

„ Truy cập dữ liệu thông qua giao diện xác định

class MyDate { private int year, mon, day;

public int getDay() { }

public boolean setDay(int) { }

};

18/02/2009

Sử dụng giao diện

MyDate d;;

d.day = 30; // compile error

d.setDay(31);

d.setMonth(2); // should return False

18/02/2009

Tại Sao Tiếp Cận Hướng Đối Tượng?

„ Loại bỏ những thiếu sót của tiếp cận theo thủ tục

„ Trong OOP

…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

„ Tăng cường khả năng sử dụng lại

Trang 5

Đặc Điểm Quan Trọng

„ Nhấn mạnh trên dữ liệu hơn là thủ tục

„ Các chương trình được chia thành các đối

tượng

„ Dữ liệu được che giấu và không thể được

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

„ Các đối tượng có thể giao tiếp với nhau

thông qua các hàm

„ Dữ liệu hay các hàm mới có thể được

thêm vào khi cần

„ Theo tiếp cận từ dưới lên

18/02/2009

Thuận Lợi

„ 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

„Giao diện được định nghĩa tốt

„Những chi tiết cài đặt được ẩn …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

18/02/2009

Lịch sử OOP

„ Các ngôn ngữ lập trình hướng đối tượng không

mới

…Simula (1967) là ngôn ngữ đầu tiên, có lớp, thừa kế,

liên kết động (hay còn gọi là hàm ảo)

„ Nhưng các ngôn ngữ hướng đối tượng chậm

hơn các ngôn ngữ thời kỳ đầu

…nên chúng chỉ được dùng rộng rãi khi máy tính bắt

đầu chạy nhanh (khoảng thời gian chiếc máy Pentium

đầu tiên ra đời)

…Lưu ý rằng biên dịch các chương trình hướng đối

tượng cũng chậm

18/02/2009

Lịch sử OOP

„ Một số hệ thống “hướng đối tượng” thời kỳ đầu không

có các lớp

… chỉ có các “đối tượng” và các “thông điệp” (v.d Hypertalk)

„ Hiện giờ, đã có sự thống nhất rằng hướng đối tượng là:

… lớp - class

… thừa kế - inheritance và liên kết động - dynamic binding

„ Một số đặc tính của lập trình hướng đối tượng có thể được thực hiện bằng C hoặc các ngôn ngữ lập trình thủ tục khác

„ Điểm khác biệt sự hỗ trợ và ép buộc ba khái niệm trên được cài hẳn vào trong ngôn ngữ

„ Mức độ hướng đối tượng của các ngôn ngữ không giống nhau

… Eiffel (tuyệt đối), Java (rất cao), C++ (nửa nọ nửa kia)

Trang 6

Lịch sử ngôn ngữ lập trình

FORTRAN I FORTRAN II ALGOL 60 LISP

ALGOL 58

CPL COBOL COMTRAN FLOW-MATIC

PROLOG ADA

PASCAL

SIMULA 67

SIMULA I

PL/1 BASIC FORTRAN IV

B

BCPL ALGOL 68

SMALLTALK 80

EIFFEL

C++

C

BETA

JAVA

1957 1960 1965 1970 1975 1980 1985 1990 1995

MODULA 2

MODULA 3

OBERON

18/02/2009

Trừu Tượng Hóa (Abstraction)

„ Trừu tượng hóa …Phân biệt cần thiết với chi tiết

„Giao diện – Cài đặt

„Cái gì – Thế nào

„Phân tích – Thiết kế

„ Các kỹ thuật trừu tượng …Đóng gói (encapsulation)

…Ẩn thông tin (information hiding)

…Thừa kế (inheritance)

…Đa hình (polymorphism)

18/02/2009

Đối Tượng (Object)

„ Đối tượng

chìa khóa để hiểu

được kỹ thuật

hướng đối tượng

„ Trong hệ thống

hướng đối tượng,

mọi thứ đều là đối

tượng

Viết một chương trình hướng đối tượng nghĩa là đang xây dựng

một mô hình của một vài bộ phận trong thế giới thực

18/02/2009

Đối Tượng Thế Giới Thực

(Real Object)

„Một đối tượng thế giới thực là một thực thể cụ thể mà thông thường bạn có thể sờ ,

„ Tất cả có trạng thái (state) và hành động (behaviour)

Trang 7

Đối Tượng Phần Mềm

(Software Object)

„ Các đối tượng phần mềm có thể được

dùng để biểu diễn các đối tượng thế giới

thực.

„ Cũng có trạng thái và

hành động

…Trạng thái: thuộc tính

(attribute; property)

…Hành động: phương thức

(method)

18/02/2009

Đối tượng (object) là một thực thể phần mềm bao bọc cácthuộc tínhvà cácphương thứcliên quan

Đối tượng phần mềm Đối tượng phần mềmXe Đạp

Thuộc tính được xác định bởi giá trị cụ thể gọi là

thuộc tính thể hiện Một đối tượng cụ thể được gọi là mộtthể hiện

18/02/2009

Lớp (Class)

„ Trong thế giới thực có nhiều đối tượng cùng loại.

„ Chương trình hướng đối tượng có nhiều đối

tượng cùng loại chia sẻ những đặc điểm chung.

„ Ví dụ

18/02/2009

Lớp (Class)

„ Mộtlớplà một thiết kế (blueprint) hay mẫu (prototype) cho các đối tượng cùng kiểu

… Ví dụ: lớp XeDap là một thiết kế chung cho nhiều đối tượng xe đạp được tạo ra

„ Lớp định nghĩa các thuộc tính và các phương thức chung cho tất cả các đối tượng của cùng một loại nào đó

„ Một đối tượng là mộtthể hiệncụ thể của một lớp

… Ví dụ: mỗi đối tượng xe đạp là một thể hiện của lớp XeDap

„ Mỗi thể hiện có thể có những thuộc tính thể hiện khác nhau

… Ví dụ: một xe đạp có thể đang ở bánh răng thứ 5 trong khi một xe khác có thể là đang ở bánh răng thứ 3

Trang 8

Đối tượng (Object)

„ Đối tượng có

…định danh

…thuộc tính (dữ liệu)

…hành vi (phương thức)

„ Mỗi đối tượng bất kể đang ở trạng thái nào đều có

định danhvà được đối xử như một thực thể riêng

biệt

…mỗi đối tượng có một handle (trong C++ là địa

chỉ)

…hai đối tượng có thể có giá trị giống nhau nhưng

handle khác nhau

18/02/2009

Ví Dụ Lớp Xe Đạp

Khai báo cho lớp XeDap

Đối tượng của lớp XeDap

18/02/2009

Thuộc Tính Lớp

& Phương Thức Lớp

18/02/2009

Thuộc Tính Lớp

& Phương Thức Lớp

…Thuộc tính lớp(class attribute) là một hạng mục dữ liệu liên kết với một lớp cụ thể mà không liên kết với các thể hiện của lớp Nó được định nghĩa bên trong định nghĩa lớp và được chia sẻ bởi tất cả các thể hiện của lớp

…Phương thức lớp(class method) là một phương thức được triệu gọi mà không tham khảo tới bất kỳ một đối tượng nào Tất cả các phương thức lớp ảnh hưởng đến toàn bộ lớp chứ không ảnh hưởng đến một lớp riêng rẽ nào

Trang 9

Thuộc Tính

& Phương Thức

„ Thuộc tính (attribute) là dữ liệu trình bày

các đặc điểm về một đối tượng

„ Phương thức (method) có liên quan tới

những thứ mà đối tượng có thể làm Một

phương thức đáp ứng một chức năng tác

động lên dữ liệu của đối tượng (thuộc

tính).

18/02/2009

Thông Điệp

& Truyền Thông Điệp

„ Thông điệp (message) là một lời yêu cầu một hoạt động Gồm có:

…Đối tượng nhận thông điệp

…Tên của phương thức thực hiện

…Các tham số mà phương thức cần

„ Truyền thông điệp : một đối tượng triệu gọi một hay nhiều phương thức của đối tượng khác để yêu cầu thông tin.

18/02/2009

Tính Bao Gói (Encapsulation)

„ Đóng gói (encapsulation) là tiến trình che

giấu việc thực thi chi tiết của một đối

tượng

18/02/2009

Ẩn Thông Tin (Information Hiding)

hay phương thức được cài đặt như thế nào Æ được che giấu đi từ các đối tượng khác

Việc che giấu những chi tiết thiết kế và cài đặt từ những đối tượng khác được gọi làẩn thông tin

Trang 10

Tính Thừa Kế (Inheritance)

„ Hệ thống hướng đối tượng cho phép các

lớp được định nghĩa kế thừa từ các lớp

khác

…Ví dụ, lớp xe đạp leo núi và xe đạp đua là

những lớp con (subclass) của lớp xe đạp

„ Thừa kế nghĩa là các phương thức và các

thuộc tính được định nghĩa trong một lớp

có thể được thừa kế hoặc được sử dụng

lại bởi lớp khác.

18/02/2009

Tính Thừa Kế (Inheritance)

„ cho phép các phần mềm sử dụng quan hệ

“là”

„ giúp ta thiết kế các dịch vụ tổng quát rồi chuyên môn hóa chúng

18/02/2009

Tính Đa Hình (Polymorphism)

cùng tên có thể được thực hiện khác nhau

đối với các đối tượng/các lớp khác nhau

„ Ngữ cảnh khác Æ kết quả khác

Đường Thẳng Hình Tròn

Vẽ

18/02/2009

Tính Đa Hình (Polymorphism)

„ Đa hình hàm - Functional polymorphism

… cơ chế cho phép một tên thao tác hoặc thuộc tính có thể được định nghĩa tại nhiều lớp và có thể có nhiều cài đặt khác nhau tại mỗi lớp trong các lớp đó

„ v.d lớp Date cài 2 phương thức setDate(),một nhận tham số là một đối tượng Date, phương thức kia nhận 3 tham số day, month, year.

„ Đa hình đối tượng - Object polymorphism

… các đối tượng thuộc các lớp khác nhau có khả năng hiểu cùng một thông điệp theo các cách khác nhau

„ vd khi nhận được cùng một thông điệp draw(), các đối tượng Rectangle và Triangle hiểu và thực hiện các thao tác khác nhau

Ngày đăng: 08/08/2014, 16:22

TỪ KHÓA LIÊN QUAN

w