tai lieu quy bo di thi tiec 11

8 303 0
tai lieu quy bo di thi tiec 11

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

Thông tin tài liệu

Lập trình hớng đối tợng Kỹ thuật lập trình hớng đối tợng Thành Viên Nhóm Công Cụ : Dơng Chí Đức ( c), Hoàng Trung Hải , Nguyễn Việt Dũng Thạch Đăng Sơn, Nguyễn Thị Hoà Ngời Trình Bầy Hoàng Trung Hải I. Giới thiệu chung Ngà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ỉ 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. Mộ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ợng 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ợng Trừ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ợng 1. Đố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. - Đố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 sau 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 3 thành phần đặc trng 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. Sự đóng gói : 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 Máy tính là một ngành khoa học nghiên cứu về việc lu 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 lu 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 trng 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 cũ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 trng 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. 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ợng 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 P p. 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; } 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 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 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ức sau đó 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 mộ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. 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ợng 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 hiệ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ảo Lậ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ụ7 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ô8 . 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. 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; } trong vd này lớp point đợc định

Ngày đăng: 15/09/2013, 03:10

Hình ảnh liên quan

Tính đa hình (Polymorphism): - tai lieu quy bo di thi tiec 11

nh.

đa hình (Polymorphism): Xem tại trang 6 của tài liệu.

Từ khóa liên quan

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

Tài liệu liên quan