Lập trình hướng đối tượng với Java - Nguyên lý thiết kế và mẫu thiết kế
Nội dung
Thiết kếmodule
Chất lượng thiết kế
Độ đo thiết kếtốt
Khái niệm vềmẫu thiết kế
Tóm tắt nội dung Lập trình hướng đối tượng với Java - Nguyên lý thiết kế và mẫu thiết kế, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
îp xÊu nhÊt Nguyên lý thiết kế… 12Nguyễn Việt Hà GhÐp nèi chung (common coupling) • C¸c module trao ®æi dữ liÖu th«ng qua biÕn tæng thÓ • Lçi cña module nµy cã thÓ ¶nh h−ëng ®Õn ho¹t ®éng cña module kh¸c • Khã sö dông l¹i c¸c module Dữ liÖu A B C m« ®un g©y lçi m« ®un gÆp lçi Nguyên lý thiết kế… 13Nguyễn Việt Hà GhÐp nèi ®iÒu khiÓn (control coupling) • C¸c module trao ®æi th«ng tin ®iÒu khiÓn • Lµm cho thiÕt kÕ khã hiÓu, khã söa ®æi, dÔ nhÇm printName (name, sex) printRecord Nguyên lý thiết kế… 14Nguyễn Việt Hà GhÐp nèi nh·n (stamp coupling) • C¸c module trao ®æi thõa th«ng tin •Module cã thÓ thùc hiÖn chøc năng ngoµi ý muèn • Lµm gi¶m tÝnh thÝch nghi calcAge (personel record)(age) Nguyên lý thiết kế… 15Nguyễn Việt Hà GhÐp nèi dữ liÖu (data coupling) • TruyÒn dữ liÖu qua tham sè • NhËn kÕt qu¶ qua tham sè vµ gi¸ trÞ tr¶ l¹i (date)(day of week) calcDayOfWeek Nguyên lý thiết kế… 16Nguyễn Việt Hà Cohesion mçi module chØ nªn thùc hiÖn mét chøc năng mäi thµnh phÇn nªn tham gia thùc hiÖn chøc năng ®ã functional high and best sequential ok communicational still ok procedural not bad at all temporal still not bad at all logical still not bad at all coincidental lowest and worst by far Nguyên lý thiết kế… 17Nguyễn Việt Hà C¸c chñng lo¹i kÕt dÝnh • KÕt dÝnh gom gãp (coincidental cohesion) - c¸c thµnh phÇn kh«ng liªn quan ®Õn nhau • KÕt dÝnh l« gic (logical cohesion) - c¸c thµnh phÇn lµm chøc năng l« gic t−¬ng tù - vd: hµm xö lý lçi chung • KÕt dÝnh thêi ®iÓm (temporal cohesion) - c¸c thµnh phÇn ho¹t ®éng cïng thêi ®iÓm - vd: hµm khëi t¹o (®äc dữ liÖu, cÊp ph¸t bé nhí...) Nguyên lý thiết kế… 18Nguyễn Việt Hà C¸c chñng lo¹i kÕt dÝnh • KÕt dÝnh thñ tôc (procedural cohesion) - c¸c thµnh phÇn t¹o cã mét thø tù x¸c ®Þnh - vd: tÝnh l−¬ng c¬ b¶n, tÝnh phô cÊp, tÝnh b¶o hiÓm • KÕt dÝnh truyÒn th«ng (communicational cohesion) - c¸c thµnh phÇn truy cËp cïng dữ liÖu - vd: thèng kª (tÝnh max, min, mean, variation...) Nguyên lý thiết kế… 19Nguyễn Việt Hà C¸c chñng lo¹i kÕt dÝnh • KÕt dÝnh tuÇn tù (sequential cohesion) - output cña mét thµnh phÇn lµ input cña thµnh phÇn tiÕp theo - vd: ¶nh mÇu -> ®en tr¾ng -> ¶nh nÐn • KÕt dÝnh chøc năng (functional cohesion) - c¸c thµnh phÇn cïng gãp phÇn thùc hiÖn mét chøc năng - vd: s¾p xÕp Nguyên lý thiết kế… 20Nguyễn Việt Hà Understandability TÝnh hiÓu ®−îc GhÐp nèi láng lÎo KÕt dÝnh cao Đ−îc lËp tµi liÖu ThuËt to¸n, cÊu tróc dÔ hiÓu Nguyên lý thiết kế… 21Nguyễn Việt Hà ThiÕt kÕ h−íng ®èi t−îng ThiÕt kÕ h−íng ®èi t−îng h−íng tíi chÊt l−îng thiÕt kÕ tèt ®ãng gãi, che dÊu th«ng tin lµ c¸c thùc thÓ ho¹t ®éng ®éc lËp trao ®æi dữ liÖu qua th«ng ®iÖp cã kh¶ năng kÕ thõa côc bé, dÔ hiÓu, dÔ t¸i sö dông Nguyên lý thiết kế… 22Nguyễn Việt Hà Adaptability TÝnh thÝch nghi ®−îc HiÓu ®−îc söa ®æi ®−îc, t¸i sö dông được Tù chøa kh«ng sö dông th− viÖn ngoµi m©u thuÉn víi xu h−íng t¸i sö dông Nguyên lý thiết kế… 23Nguyễn Việt Hà Adaptability (2) Các chức năng cần được thiết kế sao cho dễ dàng mở rộng mà không cần sửa các mã đã có (Open closed principle) Trừu tượng hóa là chìa khóa để giải quyết vấn đề này các chức năng trừu tượng hóa thường bất biến các lớp dẫn xuất cài đặt các giải pháp cụ thể sử dụng đa hình Mẫu thiết kế: là thiết kế chuẩn cho các bài toán thường gặp Nguyên lý thiết kế… 24Nguyễn Việt Hà Mẫu thiết kế (Design Patterns) Creational - Thay thế cho khởi tạo tường minh, ngăn ngừa phụ thuộc môi trường (platform) Structural - thao tác với các lớp không thay đổi được, giảm độ ghép nối và cung cấp các giải pháp thay thế kế thừa Behavioral - Che dấu cài đặt, che dấu thuật toán, cho phép thay đổi động cấu hình của đối tượng Nguyên lý thiết kế… 25Nguyễn Việt Hà Abstract Factory Một chương trình cần có khả năng chọn một trong một vài họ các lớp đối tượng Ví dụ, giao diện đồ họa nên chạy được trên một vài môi trường Mỗi môi trường (platform) cung cấp một tập các lớp đồ họa riêng: WinButton, WinScrollBar, WinWindow MotifButton, MotifScrollBar, MotifWindow pmButton, pmScrollBar, pmWindow Nguyên lý thiết kế… 26Nguyễn Việt Hà Yêu cầu Thống nhất thao tác với mọi đối tượng: button, window,... Dễ dàng - định nghĩa giao diện (interfaces): Thống nhất cách thức tạo đối tượng Dễ dàng thay đổi các họ lớp đối tượng Dễ dàng thêm họ mới Nguyên lý thiết kế… 27Nguyễn Việt Hà Giải pháp Định nghĩa Factory - lớp để tạo đối tượng: class WidgetFactory { Button makeButton(args) = 0; Window makeWindow(args) = 0; // other widgets… } Nguyên lý thiết kế… 28Nguyễn Việt Hà Giải pháp (tt) Định nghĩa Factory chi tiết cho từng họ lớp đối tượng: class WinWidgetFactory extends WidgetFactory { public Button makeButton(args) { return new WinButton(args); } public Window makeWindow(args) { return new WinWindow(args); } } Nguyên lý thiết kế… 29Nguyễn Việt Hà Giải pháp (tt) Chọn họ lớp muốn dùng: WidgetFactory wf = new WinWidgetFactory(); Khi khởi tạo đối tượng, không dùng "new" mà gọi: Button b = wf.makeButton(args); Thay đổi họ đối tượng - chỉ một lần trong mã cài đặt! Thêm họ - thêm một factory, không ảnh hưởng tới mã đang tồn tại! Nguyên lý thiết kế… 30Nguyễn Việt Hà Sơ đồ lớp Nguyên lý thiết kế… 31Nguyễn Việt Hà Ứng dụng Các hệ điều hành khác nhau Các chuẩn look-and-feel khác nhau Các giao thức truyền thông khác nhau Nguyên lý thiết kế… 32Nguyễn Việt Hà Composite Một chương trình cần thao tác với các đối tượng dù là đơn giản hay phức tạp một cách thống nhất Ví dụ, chương trình vẽ hình chứa đồng thời các đối tượng đơn giản (đoạn thẳng, hình tròn, văn bản) và đối tượng hợp thành (bánh xe = hình tròn + 6 đoạn thẳng). Nguyên lý thiết kế… 33Nguyễn Việt Hà Yêu cầu Thao tác với các đối tượng đơn giản/phức tạp một cách thống nhất - move, erase, rotate, set color Một vài đối tượng hợp thành được định nghĩa tĩnh (bánh xe) trong khi một vài đối tượng khác được định nghĩa động (do người dùng lựa chọn...) Đối tượng hợp thành có thể tạo ra bằng các đối tượng hợp thành khác Chúng ta cần một cấu trúc dữ liệu thông minh Nguyên lý thiết kế… 34Nguyễn Việt Hà Giải pháp Mọi đối tượng đơn giản kế thừa từ một giao diện chung, ví dụ Graphic: class Graphic { abstract void move(int x, int y); abstract void setColor(Color c); abstract void rotate(double angle); } Các lớp như Line, Circle... kế thừa Graphic và thêm các chi tiết (bán kính, độ dài,...) Nguyên lý thiết kế… 35Nguyễn Việt Hà Giải pháp (tt) Lớp dưới đây cũng là một lớp dẫn xuất: class CompositeGraphic extends Graphic { Graphics list[]; ... public void rotate(double angle) { for (int i=0; i<list.length; i++) list[i].rotate(); } } Nguyên lý thiết kế… 36Nguyễn Việt Hà Giải pháp (tt) CompositeGraphic là một danh sách nên nó có add(), remove() và count() Graphic nên nó còn có rotate(), move() và setColor() Các thao tác đó đối với một đối tượng hợp thành sử dụng một vòng lặp ‘for all’ Thao tác thực hiện ngay cả với trường hợp thành phần của Composite lại là một Composite khác - cấu trúc dữ liệu dạng cây Có khả năng giữ thứ tự của các thành phần Nguyên lý thiết kế… 37Nguyễn Việt Hà Giải pháp (tt) Ví dụ tạo một đối tượng hợp thành: CompositeGraphic cg; cg = new CompositeGraphic(); cg.add(new Line(0,0,100,100)); cg.add(new Circle(50,50,100)); cg.rotate(90); Nguyên lý thiết kế… 38Nguyễn Việt Hà Sơ đồ lớp Kế thừa đơn Lớp cơ sở (root) chứa phương thức add(), remove() Nguyên lý thiết kế… 39Nguyễn Việt Hà Ứng dụng Được dùng trong hầu hết các hệ thống HĐT Chương trình soạn thảo Giao diện đồ họa Cây phân tích cho biên dịch (một khối là một tập các lệnh/lời gọi hàm/các khối khác) Nguyên lý thiết kế… 40Nguyễn Việt Hà Proxy Pattern Các đối tượng có kích thước lớn, chỉ nên nạp vào bộ nhớ khi thực sự cần thiết; hay các đối tượng ở vùng địa chỉ khác (remote objects) Ví dụ: Xây dựng một trình soạn thảo văn bản có nhúng các đối tượng Graphic Vấn đề đặt ra: Việc nạp các đối tượng Graphic phức tạp thường rất tốn kém, trong khi văn bản cần được mở nhanh Giải pháp: sử dụng ImageProxy Nguyên lý thiết kế… 41Nguyễn Việt Hà Sơ đồ lớp Nguyên lý thiết kế… 42Nguyễn Việt Hà Áp dụng Proxy được sử dụng khi nào cần thiết phải có một tham chiếu thông minh đến một đối tượng hơn là chỉ sử dụng một con trỏ đơn giản cung cấp đại diện cho một đối tượng ở một không gian địa chỉ khác (remote proxy). trì hoãn việc tạo ra các đối tượng phức tạp (virtual proxy). quản lý truy cập đến đối tượng có nhiều quyền truy cập khác nhau (protection proxy). smart reference Nguyên lý thiết kế… 43Nguyễn Việt Hà Strategy Chương trình cần chuyển đổi động giữa các thuật toán Ví dụ, chương trình soạn thảo sử dụng vài thuật toán hiển thị với các hiệu ứng/lợi ích khác nhau Nguyên lý thiết kế… 44Nguyễn Việt Hà Yêu cầu Thuật toán phức tạp và sẽ không có lợi khi cài đặt chúng trực tiếp trong lớp sử dụng chúng ví dụ: việc cài thuật toán hiển thị vào lớp Document là không thích hợp Cần thay đổi động giữa các thuật toán Dễ dàng thêm thuật toán mới Nguyên lý thiết kế… 45Nguyễn Việt Hà Giải pháp Định nghĩa lớp trừu tượng để biểu diễn thuật toán: class Renderer { abstract void render(Document d); } Mỗi thuật toán là một lớp dẫn xuất FastRenderer, TexRenderer, … Nguyên lý thiết kế… 46Nguyễn Việt Hà Giải pháp (tt) Đối tượng "document" tự chọn thuật toán vẽ: class Document { render() { renderer.render(this); } setFastRendering() { renderer = new FastRenderer(); } private Renderer renderer; } Nguyên lý thiết kế… 47Nguyễn Việt Hà Sơ đồ lớp Nguyên lý thiết kế… 48Nguyễn Việt Hà Ứng dụng Chương trình vẽ/soạn thảo Tối ưu biên dịch Chọn lựa các thuật toán heuristic khác nhau (trò chơi...) Lựa chọn các phương thức quản lý bộ nhớ khác nhau
File đính kèm:
- OOP_JAVAM09.pdf