Trong thời đại CNTT phát triển như hiện nay, thì các nhà lập trình luôn phải suy nghĩ xem làm thế nào để tạo ra những chương trình hay, tiện ích...Và một trong những thứ hỗ trợ người lập trình là ngôn ngữ lập trình. Có một số phương pháp lập trình truyền thống như lập trình tuyến tính, lập trình cấu trúc...Với lập trình tuyến tính thì một số ứng dụng phức tạp không thể thực hiện được. Trong khi đó với lập trình cấu trúc, chúng ta không quản lý được sự thay đổi dữ liệu khi có nhiều chương trình cùng sử dụng một biến chung, không tiết kiệm được tài nguyên...Để khắc phục một số hạn chế trên, người ta xây dựng một số mô hình lập trình tiên tiến hơn như: Lập trình hàm, lập trình logic, lập trình trực quan, lập trình tương tranh, lập trình phân tán, lập trình hướng đối tượng.... Trong bài báo cáo này, nhóm học viên đi vào nghiên cứu mô hình lập trình hướng đối tượng trong đó có các nội dung cơ bản gồm: Tổng quan về lập trình hướng đối tượng; một số tính chất đặc trưng của lập trình hướng đối tượng… Với thời lượng quy định của một báo cáo môn học, lượng nội dung kiến thức sẽ không đủ truyền tải hết trong báo cáo. Các nội dung được nêu trong báo cáo chỉ là các nội dung trọng tâm nhất của mô hình lập trình hướng đối tượng.
Báo cáo môn học Các mô hình LTTT MỤC LỤC Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Hướng dẫn: TS Đỗ Thị Bích Ngọc Báo cáo môn học Các mô hình LTTT Hướng dẫn: TS Đỗ Thị Bích Ngọc PHẦN I: MỞ ĐẦU Trong thời đại CNTT phát triển nay, nhà lập trình phải suy nghĩ xem làm để tạo chương trình hay, tiện ích Và thứ hỗ trợ người lập trình ngôn ngữ lập trình Có số phương pháp lập trình truyền thống lập trình tuyến tính, lập trình cấu trúc Với lập trình tuyến tính số ứng dụng phức tạp thực Trong với lập trình cấu trúc, không quản lý thay đổi liệu có nhiều chương trình sử dụng biến chung, không tiết kiệm tài nguyên Để khắc phục số hạn chế trên, người ta xây dựng số mô hình lập trình tiên tiến như: Lập trình hàm, lập trình logic, lập trình trực quan, lập trình tương tranh, lập trình phân tán, lập trình hướng đối tượng Trong báo cáo này, nhóm học viên vào nghiên cứu mô hình lập trình hướng đối tượng có nội dung gồm: Tổng quan lập trình hướng đối tượng; số tính chất đặc trưng lập trình hướng đối tượng… Với thời lượng quy định báo cáo môn học, lượng nội dung kiến thức không đủ truyền tải hết báo cáo Các nội dung nêu báo cáo nội dung trọng tâm mô hình lập trình hướng đối tượng Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Báo cáo môn học Các mô hình LTTT Hướng dẫn: TS Đỗ Thị Bích Ngọc PHẦN II MÔ HÌNH LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG I GIỚI THIỆU VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Lập trình hướng đối tượng (Object Oriented Programming - gọi tắt OOP) hay chi tiết Lập trình định hướng đối tượng, phương pháp lập trình lấy đối tượng làm tảng để xây dựng thuật giải, xây dựng chương trình Thực chất phương pháp mà cách nhìn việc lập trình Để phân biệt, với phương pháp lập trình theo kiểu cấu trúc mà quen thuộc trước đây, hay gọi phương pháp lập trình hướng thủ tục (Procedure-Oriented Programming), người lập trình phân tích nhiệm vụ lớn thành nhiều công việc nhỏ hơn, sau chi tiết, cụ thể hoá để vấn đề đơn giản, để tìm cách giải vấn đề dạng thuật giải cụ thể rõ ràng qua dễ dàng minh hoạ ngôn ngữ giải thuật (hay gọi thuật giải chương trình con) Cách thức phân tích thiết kế gọi nguyên lý lập trình từ xuống (top-down), để thể trình suy diễn từ chung cụ thể Khái niệm hướng đối tượng xây dựng tảng khái niệm lập trình có cấu trúc trừu tượng hóa liệu Sự thay đổi chỗ, chương trình hướng đối tượng thiết kế xoay quanh liệu mà làm việc đó, theo thân chức chương trình Điều hoàn toàn tự nhiên hiểu mục tiêu chương trình xử lý liệu Suy cho cùng, công việc mà máy tính thực thường gọi xử lý liệu Dữ liệu thao tác liên kết với mức (còn gọi mức thấp), thứ đòi hỏi thứ có mục tiêu cụ thể, chương trình hướng đối tượng làm tường minh mối quan hệ Một cách giản lược, khái niệm nỗ lực nhằm giảm nhẹ thao tác viết mã cho người lập trình, cho phép họ tạo ứng dụng mà Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Báo cáo môn học Các mô hình LTTT Hướng dẫn: TS Đỗ Thị Bích Ngọc yếu tố bên tương tác với chương trình giống tương tác với đối tượng vật lý Những đối tượng ngôn ngữ OOP kết hợp mã liệu mà chúng nhìn nhận đơn vị Mỗi đối tượng có tên riêng biệt tất tham chiếu đến đối tượng tiến hành qua tên Như vậy, đối tượng có khả nhận vào thông báo, xử lý liệu (bên nó), gửi hay trả lời đến đối tượng khác hay đến môi trường Lập trình hướng đối tượng liên kết cấu trúc liệu với thao tác, theo cách mà tất thường nghĩ giới quanh Chúng ta thường gắn số hoạt động cụ thể với loại hoạt động đặt giả thiết quan hệ Ví dụ: Chúng ta biết xe có bánh xe, di chuyển đổi hướng cách quẹo tay lái Tương tự thế, một loại thực vật có thân gỗ Một xe cây, mà xe, giả thiết mà làm với xe làm với Chẳng hạn, thật vô nghĩa muốn lái cây, xe lại chẳng lớn thêm tưới nước cho II NHỮNG KHÁI NIỆM CƠ BẢN VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 2.1 Đối tượng Đối tượng (object): Các liệu thị kết hợp vào đơn vị đầy đủ tạo nên đối tượng Đơn vị tương đương với chương trình đối tượng chia thành hai phận chính: phần phương thức (method) phần thuộc tính (property) Trong thực tế, phương thức đối tượng hàm thuộc tính biến, tham số hay nội đối tượng (hay nói cách khác tập hợp liệu nội tạo thành thuộc tính đối tượng) Các phương thức phương tiện để sử dụng đối tượng thuộc tính mô tả đối tượng có tính chất Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Báo cáo môn học Các mô hình LTTT Hướng dẫn: TS Đỗ Thị Bích Ngọc 2.1 Lớp (class) Một lớp hiểu kiểu liệu bao gồm thuộc tính phương thức định nghĩa từ trước Đây trừu tượng hóa đối tượng Một đối tượng xác lập thực thể hóa từ lớp Khác với kiểu liệu thông thường, lớp đơn vị (trừu tượng) bao gồm kết hợp phương thức thuộc tính Để có đối tượng (mà xem biến) hoạt động việc thực thể hóa bao gồm việc cài đặt giá trị ban đầu thuộc tính việc đăng kí nhớ, mà công việc thường giao cho phương thức gọi “máy kết cấu” (constructor) hay hàm dựng Ngược lại đối tượng thuộc lớp không sử dụng có phương thức để xử lý gọi “máy hủy diệt” (destructor) hay hàm hủy Như vậy, để có đối tượng người lập trình OOP cần phải thiết kế lớp đối tượng cách xây dựng thuộc tính phương thức có đặc tính riêng Mỗi phương thức hay thuộc tính đầy đủ lớp gọi tên thành viên (member) lớp 2.2 Lớp (subclass) Lớp lớp thông thường có thêm tính chất kế thừa phần hay toàn đặc tính lớp khác Lớp mà chia kế thừa gọi lớp phụ mẫu (parent class) 2.3 Lớp trừu tượng hay lớp sở trừu tượng (abstract class) Lớp trừu tượng lớp mà thực thể hóa thành đối tượng thực dụng Lớp thiết kế nhằm tạo lớp có đặc tính tổng quát thân lớp chưa có ý nghĩa (hay không đủ ý nghĩa) để tiến hành viết mã cho việc thực thể hóa (xem thí dụ) Thí dụ: Lớp “hinh_phang” định nghĩa liệu nội có phương thức (hàm nội tại) “tinh_chu_vi”, “tinh_dien_tich” Nhưng lớp hình_phẳng chưa xác định đầy đủ đặc tính (cụ thể biến nội tọa độ đỉnh đa giác, đường bán kính toạ độ tâm hình tròn, …) nên viết thành lớp trừu Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Báo cáo môn học Các mô hình LTTT Hướng dẫn: TS Đỗ Thị Bích Ngọc tượng Sau đó, người lập trình tạo lớp chẳng hạn lớp “tam_giac”, lớp “hinh_tron”, lớp “tu_giac”,… Và lớp người viết mã cung cấp liệu nội (như biến nội r làm bán kính số nội Pi cho lớp “hinh_tron” sau viết mã cụ thể cho phương thức “tinh_chu_vi” “tinh_dien_tich”) 2.4 Phương Thức (method) Là hàm nội lớp (hay đối tượng) Tùy theo đặc tính mà người lập trình gán cho, phương pháp gọi bên hàm khác lớp đó, cho phép câu lệnh bên lớp gọi tới nó, hay cho phép lớp có quan hệ đặc biệt quan hệ lớp con, quan hệ bạn bè (friend) phép gọi tới Mỗi phương pháp có kiểu trả về, chúng trả kiểu liệu cổ điển hay trả kiểu lớp định nghĩa từ trước Một tên gọi khác phương pháp lớp hàm thành viên Người ta định nghĩa thêm vài loại phương pháp đặc biệt: - Hàm dựng (constructor) hàm dùng để cài đặt giá tri ban đầu cho biến nội dùng để khai báo việc xử dụng nhớ Hàm hủy (destructor) hàm dùng vào việc làm nhớ hủy bỏ tên đối tượng sau dùng xong, bao gồm việc xóa trỏ nội trả phần nhớ mà đối tượng dùng Trong số trường hợp hàm hủy hay hàm dựng tự động hóa ngôn ngữ OOP trường hợp Visual C++, C# - Tiện ích (utility) hàm họat động bên lớp mà không cho phép môi trường bên gọi tới Các hàm tính toán trung gian nội đối tượng mà xét thấy không cần thiết phải cho giới bên đối tượng biết 2.5 Thuộc tính (attribute) Thuộc tính lớp bao gồm biến, hằng, hay tham số nội lớp Ở đây, vai trò quan trọng thuộc tính biến chúng bị thay đổi suốt trình hoạt động đối tượng Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Báo cáo môn học Các mô hình LTTT Hướng dẫn: TS Đỗ Thị Bích Ngọc Các thuộc tính xác định kiểu kiểu chúng kiểu liệu cổ điển lớp định nghĩa từ trước Như ghi, lớp thực thể hoá thành đối tượng cụ thể tập họp giá trị biến nội làm thành trạng thái đối tượng Giống trường hợp phương pháp, tùy theo người viết mã, biến nội dùng bên phương pháp lớp đó, cho phép câu lệnh bên lớp, hay cho phép lớp có quan hệ đặc biệt quan hệ lớp con, (và quan hệ bạn bè (friend) C++) phép dùng tới (hay thay đổi giá trị nó) Mỗi thuộc tính lớp gọi thành viên liệu lớp 2.6 Thực thể (instance) Thực thể hóa (instantiate) trình khai báo để có tên (có thể xem biến) trở thành đối tượng từ lớp Một lớp sau tiến hành thực thể hóa để có đối tượng cụ thể gọi thực thể Hay nói ngược lại thực thể đối tượng riêng lẽ lớp định trước Như biến thông thường, hai thực thể lớp có trạng thái nội khác (xác định giá trị có biến nội tại) hoàn toàn độc lập yêu cầu đặc biệt từ người lập trình 2.7 Công cộng (public) Công cộng tính chất dùng để gán cho phương pháp, biến nội tại, hay lớp mà khai báo người lập trình cho phép câu lệnh bên đối tượng khác phép dùng đến Thí dụ: Trong C++ khai báo public: int my_var; biến my_var có hai tính chất tính công cộng integer hai tính chất hợp thành đặc tính biến my_var khiến xử dụng hay thay đổi giá trị (bởi câu lệnh) nơi bên lẫn bên lớp 2.8 Riêng tư (private) Riêng tư thể tính chất đóng mạnh (của đặc tính hay lớp) Khi dùng tính chất gán cho biến, phương pháp biến hay phương pháp sử dụng bên lớp mà chúng Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Báo cáo môn học Các mô hình LTTT Hướng dẫn: TS Đỗ Thị Bích Ngọc định nghĩa Mọi nỗ lực dùng đến chúng từ bên qua câu lệnh hay từ lớp bị phủ nhận hay bị lỗi 2.9 Bảo tồn (protected) Tùy theo ngôn ngữ, có vài điểm nhỏ khác cách hiểu tính chất Nhìn chung tính chất mà mà dùng để áp dụng cho phương pháp, biến nội tại, hay lớp có nội lớp hay lớp (hay nội gói Java) phép gọi đến hay dùng đến phương pháp, biến hay lớp So với tính chất riêng tư tính bảo tồn rộng rãi nghĩa chia sẻ liệu hay chức Nó cho phép số trường hợp dùng tới đặc tính lớp (từ lớp chẳng hạn) Lưu ý: Các tính chất cộng cộng, riêng tư bảo tồn dùng để thị cho lớp cách thức kế thừa lớp cha mẹ C++ 2.10 Đa kế thừa (muliple inheritance) Đây tính chất cho phép lớp có khả kế thừa trực tiếp lúc nhiều lớp khác Vài điểm cần lưu ý viết mã dùng tính chất đa kế thừa: Khi muốn có kế thừa từ nhiều lớp phụ mẫu lớp cần phải độc lập đặc biệt tên liệu hay hàm cho phép kế thừa phải có tên khác để tránh lỗi “ambiguilty” Bởi lúc phần mềm chuyển dịch xác định lớp thừa kế tên lớp phụ mẫu Không phải ngôn ngữ OOP loại phân lớp hỗ trợ cho tính chất Ngoài khái niệm trên, tùy theo ngôn ngữ, có chức OOP riêng biệt cấp thêm vào III CÁC TÍNH CHẤT CƠ BẢN CỦA LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Các phương thức thuộc tính thường gắn chặt với thực tế đặc tính sử dụng đối tượng Trong thực tế, đối tượng thường Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Báo cáo môn học Các mô hình LTTT Hướng dẫn: TS Đỗ Thị Bích Ngọc trừu tượng hóa qua việc định nghĩa lớp (class) Tập hợp giá trị có thuộc tính tạo nên trạng thái đối tượng Mỗi phương thức hay liệu nội với tính chất định nghĩa (bởi người lập trình) xem đặc tính riêng đối tượng Tập hợp đặc tính gọi chung đặc tính đối tượng Lập trình hướng đối tượng phương pháp lập trình có tính chất sau: 3.1 Tính kế thừa Tính kế thừa (inheritance): Đặc tính cho phép đối tượng có sẵn đặc tính mà đối tượng khác có thông qua kế thừa Điều cho phép đối tượng chia sẻ hay mở rộng đặc tính sẵn có mà tiến hành định nghĩa lại Tuy nhiên, ngôn ngữ định hướng đối tượng có tính chất Khi bắt đầu xây dựng ứng dụng bắt đầu việc thiết kế lớp, thông thường thấy có trường hợp số lớp dường có quan hệ với lớp khác, chúng có đặc tính giống VD: lớp AndroidPhone, IPhone, WindowsPhone hình dưới: Mỗi lớp đại diện cho loại smartphone khác lại có thuộc tính giống Thay chép thuộc tính này, hay ta đặt chúng nơi dùng lớp khác Điều thực tính kế thừa OOP: định nghĩa lớp cha – base class (trong trường hợp Smartphone ) có lớp kế thừa từ (derived class), tạo mối quan hệ cha/con hình dưới: Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Báo cáo môn học Các mô hình LTTT Hướng dẫn: TS Đỗ Thị Bích Ngọc Bây giờ, lớp kế thừa thuộc tính từ lớp cha Nếu chức lớp cha định nghĩa đầy đủ lập trình viên làm việc lớp Còn lớp muốn chức khác so với định nghĩa lớp cha ghi đè (override) chức định nghĩa lớp cha Như hình gọi thuộc tính OSVersion lớp Android Phone dùng định nghĩa khai báo lớp này, hai lớp Iphone & Windows Phone dùng định nghĩa khai báo lớp cha Smartphone 3.2 Tính đóng gói (encapsulation) che dấu thông tin (information hiding) Sự đóng gói chế ràng buộc liệu thao tác liệu thành thể thống nhất, tránh tác động bất ngờ từ bên Thể thống gọi đối tượng Trong Objetc Oriented Software Engineering Ivar Jacibson, tất thông tin hệ thống định hướng đối tượng lưu trữ bên đối tượng hành động đối tượng lệnh thực thao tác Như vật, đóng gói không đơn gom chung liệu chương trình vào khối, chúng hiểu theo nghĩa đồng liệu thao tác tác động lên liệu Trong đối tượng, liệu hay thao tác hay hai riêng (private) chung (public) đối tượng Thao tác hay liệu riêng thuộc đối tượng truy cập thành phần đối tượng, điều nghĩa thao tác hay liệu riêng truy cập phần khác chương trình tồn đối tượng Khi thao tác hay liệu chung, phần khác chương trình truy cập nó định nghĩa Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Báo cáo môn học Các mô hình LTTT Hướng dẫn: TS Đỗ Thị Bích Ngọc đối tượng Các thành phần chung đối tượng dùng để cung cấp giao diện có điều khiển cho thành thành riêng đối tượng Trong đối tượng, liệu hay thao tác hay hai riêng (private) chung (public) đối tượng Thao tác hay liệu riêng thuộc đối tượng truy cập thành phần đối tượng, điều nghĩa thao tác hay liệu riêng truy cập phần khác chương trình tồn đối tượng Khi thao tác hay liệu chung, phần khác chương trình truy cập nó định nghĩa đối tượng Các thành phần chung đối tượng dùng để cung cấp giao diện có điều khiển cho thành thành riêng đối tượng Cơ chế đóng gói phương thức tốt để thực chế che dấu thông tin so với ngôn ngữ lập trình cấu trúc 3.3 Tính đa hình (polymorphism) Đó khả thông điệp thay đổi cách thực theo lớp cụ thể đối tượng nhận thông điệp Khi lớp dẫn xuất tạo ra, thay đổi cách thực phương thức mà thừa hưởng từ lớp sở Một thông điệp gởi đến đối tượng lớp sở, dùng phương thức định nghĩa cho lớp sở Nếu lớp dẫn xuất định nghĩa lại phương thức thừa hưởng từ lớp sở thông điệp có tên với phương thức này, gởi tới đối tượng lớp dẫn xuất gọi phương thức định nghĩa cho lớp dẫn xuất Như đa hình khả cho phép gởi thông điệp đến đối tượng khác có chung đặc điểm, nói cách khác thông điệp gởi không cần biết thực thể nhận thuộc lớp nào, biết tập hợp thực thể nhận có chung tính chất Chẳng hạn, thông điệp “vẽ hình” gởi đến hai đối tượng hình hộp hình tròn Trong hai đối tượng có chung phương thức vẽ hình, nhiên tuỳ theo thời điểm mà đối tượng nhận thông điệp, hình tương ứng vẽ lên Trong ngôn ngữ lập trình OOP, tính đa hình thể qua khả cho phép mô tả phương thức có tên giống lớp khác Đặc điểm giúp người lập trình viết cấu trúc điều khiển Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Báo cáo môn học Các mô hình LTTT Hướng dẫn: TS Đỗ Thị Bích Ngọc rườm rà chương trình, khả khác thông điệp thực đòi hỏi chương trình thực Thí dụ định nghĩa hai đối tượng “hinh_vuong” “hinh_tron” có phương thức chung “chu_vi” Khi gọi phương thức đối tượng “hinh_vuong” tính theo công thức khác với đối tượng “hinh_tron” IV CÁC NGUYÊN LÝ CỦA THIẾT KẾ HƯỚNG ĐỐI TƯỢNG Những nguyên lý thiết kế hướng đối tượng (object oriented desing principle) tảng lập trình hướng đối tượng Điều quan trọng việc học tảng lập trình hướng đối tượng Abstraction (Tính trừu tượng), Encapsulation(Tính đóng gói), Polymorphism(Tính đa hình) Inheritance(Tính kế thừa), đồng thời, việc quan trọng không phải biết nguyên lý tính chất này, tạo thiết kế sáng có tính module hóa Cách tốt để học mẫu hay nguyên lý thiết kế hướng đối tượng ví dụ thực tế hiểu hậu vi phạm nguyên lý thiết kế hướng đối tượng : SOLID (S – O – L – I – D) 4.1 Single Responsibility Principle (SRP) Single responsibility principle nguyên lý thiết kế SOLID, biểu thị chữ “S” SOLID Như tiêu đề SRP, không nên có lý để thay đổi lớp hay lớp nên luôn xử lý chức đơn lẻ, Nếu bạn đặt nhiều chức vào lớp, điều dẫn đến phụ thuộc chức với bạn thay đổi chức phá vỡ chức lại, điều dẫn đến cần nhiều vòng kiểm thử khác để tránh có ngạc nhiên môi trường production (môi trường chạy thật) 4.2 Open-Closed Principle(OCP) Những lớp, phương thức hay hàm nên dễ dàng(OPEN) cho việc mở rộng (thêm chức mới) ĐÓNG(CLOSED) cho việc thay Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Báo cáo môn học Các mô hình LTTT Hướng dẫn: TS Đỗ Thị Bích Ngọc đổi Đây nguyên lý thiết kế hay SOLID, nhằm tránh thay đổi mã nguồn ổn định qua kiểm thử Open-Closed principle “O” SOLID 4.3 Liskov Substitution Principle (LSP) Theo nguyên lý LSP, hàm phương thức lớp cha hoạt động mà không xảy vấn đề lớp đối tượng lớp thay cho đối tượng lớp cha LSP liên quan tương SRP ISP (mục tiếp theo) Nếu lớp có nhiều chức lớp mà hỗ trợ số chức phá bỡ quy tắt LSP Để thực với LSP, lớp tăng thêm chức cho hàm hay phương thức lớp cha, không làm giảm chức phương thức LSP biểu thị chữ “L” SOLID 4.4 Interface Segregation Principle (ISP) Chương trình không nên cài đặt Interface không sử dụng đến Điều thường xảy Interface chưa nhiều chức năng, chương trình cần phương thức(chức năng) Interface đó.Thiết kế Interface công việc phức tạp cho Interface thay đổi mà không phá huỷ tất cài đặt cho trước 4.5 Dependency Injection or Inversion Principle (DIP) Đừng yêu cầu đối tượng phụ thuộc, cung cấp framework Điều thực tốt Spring framework, nguyên lý thiết kế hay (đẹp) lớp tiêm (inject) DI framework, dễ dàng kiểm thử với đối tượng mock đơn giản cho việc bảo trì chương trình việc tạo đối tượng mã nguồn tập trung framework mã chương trình không bừa bãi (litter) áp dùng DI framework Có nhiều cách để cài đặt DI (Dependency Injection) thay đổi bytecode mà số framework AOP làm ví dụ AspectJ hay sử dụng proxies Spring làm Lướt qua example of IOC and DI design pattern để học hỏi nhiều nguyên lý thiết kế DIP biểu thị cho chữ “D” SOLID Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Báo cáo môn học Các mô hình LTTT Hướng dẫn: TS Đỗ Thị Bích Ngọc 4.6 DRY (Don’t repeat yourself) Nguyên lý (ngoài SOLID) nguyên lý thiết kế hướng đối tượng DRY (don’t repeat yourself) có nghĩa đừng viết mã bị trùng lặp, thay vào sử dụng Abstraction (tính trừu tượng) để trừa tượng hoá thứ chung nơi Nếu có đoạn mã y chang hai nơi khác nhau, đưa chúng vào hàm, hay sử dụng giá trị cứng (hard-coded value) lần tạo cho constant (public final constant) Ích lợi nguyên lý để dễ bào trì mã nguồn Quan trọng đừng lạm dụng nhiều, trùng lặp cho mã lệnh, mà cho chức Nghĩa là, sử dụng đoạn mã chung để kiểm tra tính hợp lệ OrderID SSN, không đồng nghĩa hai phương thức kiểm tra phải giống hay chúng giống tương lai Bởi sử dụng mã chung cho hai chức khác (một kiểm tra OrderID, kiểm tra SSN) vô tình đưa chúng dính chặt vào mãi OrderID thay đổi hình thức, chức kiểm tra tính hợp lệ SSN lẽ bị phá huỷ Vì để đề phòng dính chặt không nên phối hợp thứ lại mà nên sử dụng mã lệnh giống không bị phụ thuộc vào 4.7 Encapsulate What Changes Chỉ có thứ bất biến phần mềm “Change” (Sự thay đổi, chơi chữ), phải bao đóng (encapsulate) mã nguồn mà ta mong muôn mã nguồn ta nghi ngờ bị thay đổi tương lai Một số mẫu thiết kế hướng đối tượng sử dụng nguyên lý này, Factory design pattern ví dụ điển hình, bao đóng việc tạo đối tượng cung cấp cách mềm dẻo để tạo “sản phẩm” mà không ảnh hưởng đến mã 4.8 Favor Composition over Inheritance Luôn sử dụng favor composition thay cho inheritance Composition chấp nhận thay đổi hành vi lớp lúc Runtime (lúc chương trình chạy) cách thiết lập thuộc tính suốt trình runtime cách sử dụng Interface thay cho lớp, sử Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Báo cáo môn học Các mô hình LTTT Hướng dẫn: TS Đỗ Thị Bích Ngọc dụng tính đa hình (polymorphism) để thay lớp cài đặt Interface tốt cách mềm dẻo lúc 4.9 Programming for Interface not Implementation Luôn lập trình cho Interface, không lập trình cho việc cài đặt Điều giúp tạo mã lệnh mềm dẻo, mã lệnh làm việc với cài đặt cho Interface 4.10 Delegation principle Đừng tự làm hết thứ, giao cho lớp tương ứng Để so sánh hai đối tượng có giống nhau, yêu cầu so sánh thay đưa cho lớp khác kiểm tra Lợi ích nguyên lý để trùng lặp mã dễ dàng thay đổi hành vi lớp Tất nguyên lý thiết kế hướng đối tượng giúp chúng viết mã linh hoạt tốt hơn, giảm phụ thuộcthuộc tạo mối liên kết cao Lý thuyết bước đầu tiên, quan trong trình quát triển khả tìm cách ứng dụng nguyên lý Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Báo cáo môn học Các mô hình LTTT Hướng dẫn: TS Đỗ Thị Bích Ngọc PHẦN III CÁC NGÔN NGỮ VÀ VÀI ỨNG DỤNG CỦA OOP I CÁC NGÔN NGỮ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Xuất phát từ tư tưởng ngôn ngữ SIMULA67, trung tâm nghiên cứu Palo Alto (PARC) hãng XEROR tập trung 10 năm nghiên cứu để hoàn thiện ngôn ngữ OOP với tên gọi Smalltalk Sau ngôn ngữ OOP đời Eiffel, Clos, Loops, Flavors, Object Pascal, Object C, C++, Delphi, Java, C#… II MỘT SỐ ỨNG DỤNG TIÊU BIỂU Chính XEROR sở ngôn ngữ OOP đề tư tưởng giao diện biểu tượng hình (icon base screen interface), kể từ Apple Macintosh Microsoft Windows phát triển giao diện đồ họa ngày Trong Microsoft Windows, tư tưởng OOP thể cách rõ nét "chúng ta click vào đối tượng", đối tượng control menu, control menu box, menu bar, scroll bar, button, minimize box, maximize box, … đáp ứng công việc tùy theo đặc tính đối tượng Turbo Vision hãng Borland ứng dụng OOP tuyệt vời, giúp lập trình viên không quan tâm đến chi tiết chương trình gia diện mà cần thực nội dung vấn đề Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Báo cáo môn học Các mô hình LTTT Hướng dẫn: TS Đỗ Thị Bích Ngọc PHẦN IV: ỨNG DỤNG QUẢN LÝ THƯ VIỆN MÔ HÌNH LAYER I KHÁI QUÁT VỀ ỨNG DỤNG Ứng dụng Quản lý Thư viện lập trình theo mô hình hướng đối tượng với layer: - DataAcces Layer: Layer thực nhiệm vụ kết nối CSDL Layer có 01 class: Xuly.cs - Business Layer: Layer thực nhiệm vụ xử lý liệu trước hiển thị gồm chức thêm, sửa, xóa Có 02 class layer này: Dulieu.cs (lưu trữ liệu) XL_Dulieu.cs (thực thao tác SQL) - Presentation Layer: Layer giao tiếp với người dùng để lấy liệu hiển thị kết thông qua thành phần giao diện người dùng Ngôn ngữ sử dụng lập trình: C#; Hệ quản trị CSDL: SQLServer; Môi trường: Visual Studio 2015 Chức năng: Quản lý sách, độc giả, mượn – trả sách, nhân viên thư viện II MÔ HÌNH CSDL CỦA CHƯƠNG TRÌNH Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Báo cáo môn học Các mô hình LTTT III CÁC FORM CHỨC NĂNG 3.1 Chương trình 3.2 Quản lý sách Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Hướng dẫn: TS Đỗ Thị Bích Ngọc Báo cáo môn học Các mô hình LTTT 3.3 Quản lý độc giả Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Hướng dẫn: TS Đỗ Thị Bích Ngọc Báo cáo môn học Các mô hình LTTT 3.4 Quản lý mượn – trả sách 3.5 Quản lý nhân viên thư viện Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Hướng dẫn: TS Đỗ Thị Bích Ngọc Báo cáo môn học Các mô hình LTTT Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Hướng dẫn: TS Đỗ Thị Bích Ngọc Báo cáo môn học Các mô hình LTTT Hướng dẫn: TS Đỗ Thị Bích Ngọc PHẦN IV KẾT LUẬN Trong năm gần đây, lập trình hướng đối tượng nhanh chóng trở nên gần gũi nhờ đời liên tiếp ngôn ngữ lập trình hướng đối tượng Sức mạnh mô hình lập trình hướng đối tượng thể việc mô hình hóa hệ thống dựa đối tượng thực tế, khả đóng gói bảo vệ an toàn liệu, khả sử dụng lại mã nguồn để tiết kiệm chi phí tài nguyên Đặc biệt khả chia sẻ mã nguồn cộng đồng lập trình viên Những điểm mạnh hứa hẹn thúc đẩy phát triển môi trường lập trình tiên tiến với công nghiệp lắp ráp phần mềm với thư viện thành phần có sẵn Báo cáo môn học “Các mô hình lập trình tiên tiến” với chủ đề “Mô hình lập trình hướng đối tượng” nhóm học viên nêu khái quát số khai niệm mô hình lập trình hướng đối tượng, tính chất ứng dụng mô hình lập trình hướng đối tượng Với thời lượng không cho phép, lượng kiến thức hạn chế, đề nhóm nêu báo cáo nhiều tồn tại, hạn chế Nhóm xin gửi lời cảm ơn trân trọng đến giáo viên hướng dẫn TS Đỗ Thị Bích Ngọc cung cấp tài liệu, phương pháp nghiên cứu để hoàn thiện báo cáo tiến độ Nhóm – Lớp Hệ thống thông tin M16CQIS01-B Báo cáo môn học Các mô hình LTTT Hướng dẫn: TS Đỗ Thị Bích Ngọc TÀI LIỆU THAM KHẢO [1] Lập trình hướng đối tượng C++ Nguyễn Thanh Thuỷ [2] Lập trình hướng đối tượng C++ Trần Văn Lăng [3] C++ Kỹ thuật Ứng dụng – Scott Robert Ladd [4] Ngôn ngữ lập trình C C++ [5] Giáo trình lập trình hướng đối tượng Lê Thị Mỹ Hạnh – ĐH Đà Nẵng [6] Lập trình hướng đối tượng – Trần Đình Quế, HVCN BCVT Nhóm – Lớp Hệ thống thông tin M16CQIS01-B ... trình tương tranh, lập trình phân tán, lập trình hướng đối tượng Trong báo cáo này, nhóm học viên vào nghiên cứu mô hình lập trình hướng đối tượng có nội dung gồm: Tổng quan lập trình hướng đối. .. THIỆU VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Lập trình hướng đối tượng (Object Oriented Programming - gọi tắt OOP) hay chi tiết Lập trình định hướng đối tượng, phương pháp lập trình lấy đối tượng làm tảng... đây, lập trình hướng đối tượng nhanh chóng trở nên gần gũi nhờ đời liên tiếp ngôn ngữ lập trình hướng đối tượng Sức mạnh mô hình lập trình hướng đối tượng thể việc mô hình hóa hệ thống dựa đối tượng