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

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

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

Thông tin tài liệu

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

Lập trình hướng đối tượngKỸ THUẬT LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGThành Viên Nhóm Công Cụ :Dương Chí Đức ( c), Hoàng Trung Hải , Nguyễn Việt DũngThạch Đăng Sơn, Nguyễn Thị HoàNgười Trình BầyHoàng Trung HảiI. Giới thiệu chungNgày nay khi tin học ngày càng phát triển mạnh mẽ và thâm nhập vào mọi lĩnh vực của đời sống việc xây dựng ứng dụng cho các ngành nghiệp vụ không đơn thuần chỉ bó hẹp trong một vấn đề mà phải sử dụng những kiến thức, thành quả của nhiều lĩnh vực khác nhau. Sẽ khó khăn nếu tự mình xây dựng ứng dụng, khái niệm Object(đối tượng) ra đời nhằm giải quyết vấn đề đó. Để hiểu rõ ưu điểm của lập trình hướng đối tượng chúng ta hãy tìm hiểu một chút về lập trình có cấu trúc. Lập trình có cấu trúc được xuất hiện vào những năm 60-70. Chương trình có cấu trúc được tổ chức theo các phép toán mà nó phải thực hiện. Về bản chất chương trình được chia thành các thủ tục riêng lẻ(còn gọi là hàm), chúng được thực hiện các nhiệm vụ riêng rẽ trong một quá trìng lớn và phức tạp hơn. Các thủ tục này được giữ riêng biệt nhau nhiều nhất có thể được, mỗi quá trình có logic và dữ liệu riêng. Thông tin được truyền qua các thủ tục bằng cách dùng tham biến, mà thủ tục có thể có dữ liệu riêng mà bên ngoài phạm vi của nó không thể thâm nhập được. Nói cách khác hàm như một chường trình chính được thu nhỏ có thể gắn với nhau để xây dựng một ứng dụng. Mục tiêu của lập trình có cấu trúc là làm cho việc phát triển phần mềm được dễ dàng hơn đ/v người lập trình trong khi phẫn tăng cường được độ tin cậy và tính dễ bảo trì. Chương trình có cấu trúc được xây dựng bằng cách chia nhỏ chương trình lớn thành các phần cơ bản, các thành phần này lại trở thành hàm bên trong chương trình. Bằng cách cô lập các quá trình bên trong hàm, chương trình có cấu trúc làm giảm thiểu cơ may thủ tục nọ ảnh hưởng tới thủ tục kia. Điều này cũng làm cho việc cô lập vấn đề trở nên dễ dàng hơn. Việc tách bạch hoá chương trình cũng cho phép bạn viết chương trình dễ dàng hơn và duy trì sự kiểm soát trên từng hàm. Biến toàn cục bị thay thế bởi biến nội bộ và các tham biến vốn có phạm vi nhỏ hơn và dễ kiếm soát hơn. Cách tổ chức tốt hơn này bạn có khả năng hiểu logic chương trình làm cho việc phát triển bảo trì của nó được hiệu quả hơn. Người trình bầy: Hoàng Trung Hải – Nhóm công cụ1 Lập trình hướng đối tượngMột khái niệm đầy hiệu lực được đưa vào với lập trình có cấu trúc là trừu tượngTrừu tượng có thể được định nghĩa như là khả năng xét một điều gì đó mà không quan tâm đến các chi tiết bên trong của nó. Trong một chương trình có cấu trúc, ta chỉ cần biết rằng thủ tục đã cho thực hiện một nhiệm vị xác định. Việc nhiệm vụ này thực hiện như thế nào không quan trọng, chừng nào mà thủ tục còn tin cậy được thì còn có thể dùng nó mà không cần phải biết làm sao nó hoàn thành đúng đắn chức năng của mình. Điều này được xem như nền tảng của lập trình có cấu trúc. Khi độ phức tạp của chương trình tăng lên, sự phụ thuộc của nó vào các kiểu dữ liệu cơ bản mà nó sử lý cũng tăng theo. Vấn đề trở nên rõ ràng rằng cấu trúc dữ liệu trong chương trình quan trọng không kém các phép toán thực hiện trên chúng. Điều này trở nên hiển nhiên hơn khi chương trình càng tăng về kích thước. Các kiểu dữ liệu xử lý trong nhiều thủ tục bên trong một chương trình có cấu trúc, và khi có sự thay đổi trong các kiểu dữ liệu này thì cũng phải thực hiện cả những thay đổi ở mọi nơi có các tác động lên kiểu dữ liệu đó. Đây là một công việc tốn thời gian và hiệu quả đối với các chương trình có hàng nghìn dòng lệnh và hàng trăm hàm. Một nhược điểm nữa của lập trình có cấu trúc lộ ra khi cần phải dùng nhiều người để lập trình cho một ứng dụng. Trong một chương trình có cấu trúc, từng người được giao xây dựng một tập các hàm và kiểu dữ liệu dùng chung cho lẫn nhau cho nên những thay đổi về cấu trúc dữ liệu của người này sẽ ảnh hương tới công việc của người khác, những sai sót trong liên lạc giữa các thành viên trong nhóm có thể dẫn tới việc mất thời gian để viết lại. Ngược lại, lập trình hướng đối tượng làm cho chương trình gọn hơn, dễ dàng kết hợp với các chương trình khác. OOP là phương pháp đóng gói từng phần của chương trình thành các đối tượng để có thể tái sử dụng cũng như duy trì bảo dưỡng dễ dàng hơn. Lập trình viên có thể tập trung sâu hơn vào công việc cần phải giải quyết, tiết kiệm thời gian công sức xây dựng chương trình mà vẫn sử dụng được các chức năng đã có. II.Lập trình hướng đối tượng1. Đối tượng:- Đối tượng là sự kết hợp của chương trình với dữ liệucó thể sử dụng như một đơn vị độc lập. Người trình bầy: Hoàng Trung Hải – Nhóm công cụ2 Lập trình hướng đối tượng- Đối tượng là phần dữ liệu được khai báo thuộc lớp. Khái niệm về lớp sẽ được giới thiệu ở phần sau3 thành phần đặc trưng của đối tượng :- Thuộc tính: là các thông tin về bản thân đối tượng, có thể lây ra từ chúng hoặc thay đổi chúng. Ví dụ: đối tượng xe thì có thuộc tính số xe, màu sơn, số máy, . . . - Phương pháp: Có thể là công việc mà đối tượng đó phải thực hiện. Ví dụ: Xe thì phương pháp là đi, ngoặt, . . . - Sự kiện : là hoạt động xẩy ra mà đối tượng nhận biết được Vd: ở Windows khi ta nhấp chuột vào một form nào đó thì sự kiện nhâp chuột xảy ra. 2. Lập trình hướng đối tượng- Lập trình hướng đối tượng gắn câu trúc dữ liệu với cac phép toán. - Lập trình hướng đối tượng là phương pháp mới được tiếp cận việc lập trình Nó được xây dựng trên nền tảng của các khái niệm lập trình có cấu trúc và sự trừu tượng hoá dữ liệu. Sự thay đổi cơ bản là OOP được thiết kế thiết kế xoay quanh dữ liệu mà nó thao tác chứ không theo bản thân các thao tác- OOP cho phép ta dùng các quá trình trí tuệ này với các khái niệm trừu tượng được dùng trong chương trình máy tính. VD: không thể viết số phức lên bản ghi nhân sự hoặc không được cộng hai bản ghi với nhau. - OOP cho phép ta chia bài toán thành các bài toán nhỏ quan hệ với nhau. Mỗi bài toán là một đối tượng chứa dũ liệu và lệnh có quan hệ với có quan hệ với đối tượng đó. - Phương pháp trong lập trình hướng đối tượng mô phỏng sự phân lớp trong tự nhiên III Kỹ thuật lập trình OOP :Trong mục này chúng sẽ tìm hiểu các khái niệm như sự đóng gói, lớp, thực thể, tình kế thừa của đối tượng, tính đa hình, phương thức ảo. Đây là những khái niệm căn bản và là nền tảng trong lập trình hương đối tượng. Người trình bầy: Hoàng Trung Hải – Nhóm công cụ3 Lập trình hướng đối tượng Sự đóng gói : Máy tính là một ngành khoa học nghiên cứu về việc lưu trữ và xử lý thông tin, thực chất đó là việc xử lí dữ liệu. Vì vậy sẽ hoàn toàn tự nhiên nếu một chương trình được thiết kế xoay quanh dữ liệu hơn là theo bản thân các chức năng của chương trình. Dữ liệu và thao tác trên dữ liệu được lên kết với nhau, cái này đòi hỏi các kia chính vì thế OOP làm cho các quan hệ hỗ trợ được thể hiện rõ ràng nhất. Trong quá trình một chương trình OOP thực hiện, chúng ta có gửi cùng một thông điệp đến các đối tượng khác nhau. Để làm được điều đó cấu trúc chương trình đã được tổ chức sao cho có sự tương ứng, sự đồng nhất giữa dữ liệu và các thao tác tác động đến dữ liệu. Khi đó chúng ta quan tâm đến vấn đề " phải làm công việc cụ thể gì " mà chỉ điều khiển bằng mệnh lệnh "làm việc" có nghĩa là cùng với một mệnh lệnh một thông điệp chương trình vẫn nhận biết để thực hiện. Sự đóng gói chính là khả năng cất giữ riêng biệt dữ liệu và phương thức tác động lên dữ liệu đó, " tất cả thông tin của một hệ thống định hướng đối tượng được lưu giữ bên trong các đối tượng và nó chỉ có thể hành động khi các đối tượng đó được ra lệnh thực hiện các thao tác. Như vậy sự đóng gói không đơn thuần chỉ sự gom chung dữ liệu và chương trình vào bên trong một khối, chúng còn được hiểu thêm theo nghĩa đó là sự đồng nhất dữ liệu và các thao tác tác động lên giữ liệu đó. **vd: với vật liệu xi măng, sắt thép. . . được đồng nhất với thao tác làm móng, xây tường khi đó người điều hành chỉ với một mệnh lệnh "hãy làm đi" người thợ sẽ biết công việc của mình. Tất cả những gì thấy được của đối tượng đã được đóng gói đó là các phương thức giao tiếp của đối tượng. Lớp và thực thể :Khi được đề cập đến hệ thống được tổ chức xung quanh các cấu trúc dữ liệu, rõ ràng chúng ta quan tâm đến các lớp các cấu trúc dữ liệu hơn là bản thân từng dữ liệu, từng đối tượng. Phấn quan tâm trong một hệ thống không phải là một mô tả dữ liệu riêng, một cú pháp đơn lẻ, mà là tất cả các bộ mô tả tập hợp cấu trúc dữ liệu được đặt trưng bởi các tính chất chung. Lớp ( Class ) thực chất là một kiểu dữ liệu được định nghĩa trong chương trình. Tuy nhiên khái niệm về lớp còn xa hơn, nó chứa bên trong sự cài đặt về đặc tính Người trình bầy: Hoàng Trung Hải – Nhóm công cụ4 Lập trình hướng đối tượngcũng như những thao tác có thể có trên dữ liệu. Một cách tổng quát, lớp đặc trưng cho một mẫu của một vài đối tượng và mô tả cấu trúc bên trong của những đối tượng này. Những đối tượng của cùng một lớp có cùng định nghĩa về các thao tác và cùng cấu trúc dữ liệu của chúng. VD: chúng ta tạo một lớp POINT hai thành phần là toạ độ và điểm trong mặt phẳng và thao tác như gán giá trị cho toạ độ, hiển thị toạ đọ của điểm. class point{ int x // toạ độ của điểm int y voidsetXY (int a, int b){ x:=a; // thủ tục gán giá trị cho toạ độ y:=b; } voidDisplay (void) {printf("hoành độ: %d\n", x); // in hoành độ và tung độprintf ("tung độ : %d\n", y);} }Thực thể (instance) là một vật thể có thực bên trong bộ nhớ, thực chất đó là đối tượng, nói cách khác thực thể là một biến (variable) được khai báo thuộc kiểu lớp. Một thực thể là một đối tượng được tạo ra từ một lớp. Lớp môt tả cấu trúc (hành vi và thông tin ) của thực thể, trong khi đó tình trạnh hiện hành (curent state) của thực thể được xác định bởi những thao tác tác động lên thực thể. Vd:class point{ int x // toạ độ của điểm int y voidsetXY (int a, int b){ x:=a; // thủ tục gán giá trị cho toạ độ y:=b; } voidDisplay (void) {printf("hoành độ: %d\n", x); // in hoành độ và tung độprintf ("tung độ : %d\n", y);} }Voidmain(void) {printf (" gan cho p hai toa do (0, 1) va (4, 5) \n");point p; // tạo ra đối tượng Pp. setXY(0, 1); // cho thực thể p giá trị là (0, 1)p. display () ;p. setXY(4, 5); // cho thực thể p giá trị là (4, 5)p. display;Người trình bầy: Hoàng Trung Hải – Nhóm công cụ5 Lập trình hướng đối tượng}trong vd này lớp point được định nghĩa nôm na như một kiểu dữ liệu mới. Tính kế thừa (Inheritance)Trước khi đề cập đến khái niệm kế thừa chúng ta tìm hiểu qua một ít về sự phân lớp các đối tượng. Đây chính là sự xắp xếp các đối tượng, tổ chức sao cho thế giới thực ( real world) đang khảo sát nằm trong một khôn khổ nhất định. Khi đó, nếu gặp được một đối tượng mới chúng ta dễ dàng đưa nó vào lớp thích hợp. Sự phân lớp của đối tượng giúp cho hệ thống đơn giản hơn tập hợp lại các đối tượng có cùng những hành vi giao tiếp. Sự phân lớp như vậy chính là bước đầu tiên trong việc xây dựng chương trình theo hướng đối tượng. Bây giờ chúng ta bàn đến tính kế thừa. Sau khi tiến hành phân lớp, công việc kế tiếp là xây dựng các lớp dẫn xuất từ những lớp đã có gọi là lớp cơ sở. những lớp này, ngoài tính chất riêng của mình thì chúng còn giữ lại các đặc điểm của các lớp cơ sở, nói cách khác chúng thừa kế các hành vi và dữ liệu của lớp cơ sở. Lớp kế thừa từ lớp cơ sở gọi là lớp dẫn xuất, những lớp dẫn xuất này đến lần lượt chúng lại đóng vai trò lớp cơ sở của các dẫn xuất khác. Vd: chúng ta xây dựng lớp window trong đó có một phương thứcsau đó dẫn đến lớp dẫn xuất Title_Window từ lớp Windowđể xuất dòng chữ trong khung cửa sổ. class window { public:voidShownd (int x, int y, int w, int h) {rectangle (x, y, x+w, y+h) }}class title_window : public window { public: voidshownTitlewnd(int x, int y, int w, int h, char*title);rectangle(x, y, x+w, y+h);outtext(x, y+2); shownwindow(x, y+14, x+w, y+h);}}Với tính kế thừa chúng ta không phải mất công xây dựng lại từ đầu những đối tượng mới, chỉ cần bổ sung để có được trong các lớp dẫn xuất những đặc tính cần thiết. Nhớ tính kế thừa các đối tượng thuộc lớp khác nhau sẽ có chung một vài phương thức như những hành vi giao tiếp. Khi đó chúng ta có thể gửi cùng Người trình bầy: Hoàng Trung Hải – Nhóm công cụ6 Lập trình hướng đối tượngmột thông điệp đến tất cả các đối tượng có cùng tính một chất đó là những đối tượng có cùng kiểu cơ sở. Tính đa hình (Polymorphism):Đa hình là khả năng cho phép gởi cùng một thông điệp đến những đối tượng khác nhau cùng có chung một đặc điểm, nói cách khác thông điệp được gửi đi không cần biết thực thể nhận thuộc lớp nào chỉ biết rằng tập hợp các thực thể nhận có chung một tính chất nào đó. Chẳng hạn thông điệp vẽ hình được gửi đến cả đối tượng hình hộp lẫn hình tròn. Trong hai đối tượng này đếu có phương thức vẽ hình, nên tuỳ theo thời điểm mà đối tượng nhận thông điệp, hình tương ứng sẽ được vẽ lên. Trong các ngôn ngữ lập trình OOP, tính đa hình thể hiện qua khả năng cho phép mô tả những phương thức có tên giống nhau. Đặc điểm này giúp người lập trình không phải viết những cấu trúc điều khiển rườm rà trong chương trình của mình, các khả năng khác nhau của thông điệp chỉ thực sự đòi hỏi khi chương trình thực hiện. Dùng để viết chương trình có thể mở rộng nhiều hơn nghiã là khi dữ liệu mới được thêm vào có liên hệ với các kiểu dữ liệu đang có thì bản chất đa dạng sẽ làm cho loại này thích hợp ngay mà không cần phải thay đổi chương trình. Tính đa hình có được chính nhờ các khái niêm như phương thức ảo, kết nối động. Phương thức ảo (vitual method):Trong các phần trên chúng ta đề cập đến sự hoàn chỉnh của việc lập trình hướng đối tượng, đó là việc có thể gửi cùng một thông điệp đến các đối tượng khác nhau mà không cần những cấu trúc điều khiển rườm rà, đối tượng sẽ nhận được chỉ thị cần thiết ngay sau khi chạy chương trình. Kỹ thuật này gọi là " sự kết nối động " (dynamic binding), nó cho phép chúng ta can thiệp vào sự hoạt động của các thực thể mà không cần biên dịch lại chương trình, chúng ta có thể truyền và nhận thông tin từ những đối tượng mới này giống như các đối tượng đã có. Để có sự thuận lợi đó, trong khi cài đặt các lớp của đối tượng, chúng ta phải cài đặt các phương thức ảo trong ngôn ngữ OOP thường được gọi là thành phần ảo. Đây là các phương thức sẽ mang nội dung cụ thể vào lúc thực hiện chương trình . Khi chương trình biên dịch dịch từ ngôn ngữ nguồn sang ngôn ngữ máy các đoạn chương trình của các phương thức ảo sẽ được đưa vào trong bảng các phương thức ảo (vitual method table VMT). Vào thời điểm chương trình thực Người trình bầy: Hoàng Trung Hải – Nhóm công cụ7 Lập trình hướng đối tượnghiện, các phương thức ảo này sẽ gọi từ các bảng này. Chính vì vậy kỹ thuật kết nối động đôi khi còn được gọi là kỹ thuật kết nối trễ hay kết nối lúc chạy. Chẳng hạn, trong khi đề cập đến tính đa hình ở trên chúng ta nhận thấy thông điệp vẽ hình đã được gửi đến các đối tượng khác nhau để thực hiện một công việc vẽ một hình ảnh. Phương thức vẽ hình trong trường hợp này là một phương thức ảo, nó không phải độc quyền của một đối tượng nào mà nó có thể xuất hiện trong các kiểu khác nhau và tuỳ thuộc vào nội dung cụ thể của kiểu đó. Trên đây chúng tôi đã giới thiệu một số khái niệm cơ bản về kỹ thuật lập trình hướng đối tượng cũng như ưu điểm của kỹ thuật này so với các kỹ thuật lập trình khác. Tài liệu tham khảoLập trình hướng đối tượng C++ (Trần Văn Lăng)Object oriented modeling and deginer Turbo C++ and Application (Yoeung Kosal) Người trình bầy: Hoàng Trung Hải – Nhóm công cụ8 . nhâp chuột xảy ra. 2. Lập trình hướng đối tượng- Lập trình hướng đối tượng gắn câu trúc dữ liệu với cac phép toán. - Lập trình hướng đối tượng là phương pháp. dựng chương trình mà vẫn sử dụng được các chức năng đã có. II .Lập trình hướng đối tượng1 . Đối tượng: - Đối tượng là sự kết hợp của chương trình với dữ

Ngày đăng: 18/08/2012, 11:18

Từ khóa liên quan

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

Tài liệu liên quan