Phần mềm ngày càng trở nên phức tạp, thách thức trong những năm tới không phải là vấn đề tốc độ, kinh phí hay sức mạnh của nó mà sẽ là độ phức tạp.Vì vậy chúng ta phải dần loại bỏ chúng. Một cách tổng quan khi xây dựng phần mềm thì ta phải quan tâm đến tổ chức, các quan hệ cấu trúc hình thành nên hệ thống. Do khả năng của con người là có giới hạn khi khảo sát các vấn đề phức tạp như tổng thể. Thông qua mô hình hoá ta sẽ giới hạn vấn đề bằng cách nghiên cứu tập trung vào một khía cạnh của vấn đề và vào một thời điểm. Không nên giải quyết tất cả các vấn đề vào một lần thiết kế, cần tranh thủ sử dụng lại những trường hợp đã làm, khi ta tìm được một giải pháp tốt, cần phát huy nó cho lần sau. Xu thế áp dụng phương pháp hướng đối tượng thay cho phương pháp cấu trúc ngày càng phổ biến khi xây dựng các hệ thống phần mềm lớn và phức tạp. Do tầm quan trọng và tính linh hoạt của phương pháp phân tích thiết kế hướng đối tượng được sử dụng rộng rãi tại các nước đang phát triển và đã được áp dụng tại Việt Nam. Phân tích hướng đối tượng là một vấn đề khó, càng khó hơn cho người thiết kế mới vì họ thường lúng túng trong vấn đề chọn lựa phương pháp nào tối ưu cho dự án, cho hệ thống của họ; đồng thời làm sao sử dụng lại và nâng cấp từ những thuật toán hướng đối tượng đã được sử dụng trước đó. Điều này cũng gây trở ngại cho những người cần tìm hiểu về hệ thống đang tồn tại, vì tính ưu việt và đặc trưng của các ngôn ngữ hướng đối tượng nên họ thường hay khó khăn nhận biết các lớp, các đối tượng... kế thừa đặc biệt là trong các dự án lớn, hệ thống lớn Khi gặp một vấn đề, người thiết kế đã lựa chọn một phương pháp tối ưu, sao cho nó tốt nhất, phù hợp nhất, sử dụng dễ, giảm thiểu được độ phức tạp cũng như tiết kiệm công sức cho những lần phát triển lần sau, cũng như những lần tái sử dụng lại chúng. Thông thường khi tìm ra một giải pháp tốt, ta thường lưu lại để sử dụng chúng cho lần sau, để lần sau sẽ ít tốn thời gian để tìm hiểu mà vẫn có thể áp dụng chúng tốt. Chính vì dựa vào khái niệm mẫu thiết kế của Christopher Alexander khi áp dụng trong thiết kế các toà nhà, giúp cho người kiến trúc sư dựa vào một số khuôn dạng sẵn có mà thiết kế theo, hoặc cải tiến nó. Các chuyên gia trong vấn đề thiết kế và lập trình đã đúc rút ra kinh nghiệm để đưa ra một số khuôn dạng chung về mẫu thiết kế phần mềm mà khi áp dụng đáp ứng được phần nào yêu cầu khắt khe của công nghệ phần mềm hiện đại. Và các nhà thiết kế sau này coi đó là một từ vựng chung để thiết kế cũng như khi áp dụng và hiểu chúng để lập trình. Trên thực tế không thể có một mẫu hoàn chỉnh cho phần mềm, nhưng chắc chắn có thể tìm ra một khuôn dạng chung hoàn chỉnh cho các mẫu này
Chương 1 LỜI NÓI ĐẦU Phần mềm ngày càng trở nên phức tạp, thách thức trong những năm tới không phải là vấn đề tốc độ, kinh phí hay sức mạnh của nó mà sẽ là độ phức tạp.Vì vậy chúng ta phải dần loại bỏ chúng. Một cách tổng quan khi xây dựng phần mềm thì ta phải quan tâm đến tổ chức, các quan hệ cấu trúc hình thành nên hệ thống. Do khả năng của con người là có giới hạn khi khảo sát các vấn đề phức tạp như tổng thể. Thông qua mô hình hoá ta sẽ giới hạn vấn đề bằng cách nghiên cứu tập trung vào một khía cạnh của vấn đề và vào một thời điểm. Không nên giải quyết tất cả các vấn đề vào một lần thiết kế, cần tranh thủ sử dụng lại những trường hợp đã làm, khi ta tìm được một giải pháp tốt, cần phát huy nó cho lần sau. Xu thế áp dụng phương pháp hướng đối tượng thay cho phương pháp cấu trúc ngày càng phổ biến khi xây dựng các hệ thống phần mềm lớn và phức tạp. Do tầm quan trọng và tính linh hoạt của phương pháp phân tích thiết kế hướng đối tượng được sử dụng rộng rãi tại các nước đang phát triển và đã được áp dụng tại Việt Nam. Phân tích hướng đối tượng là một vấn đề khó, càng khó hơn cho người thiết kế mới vì họ thường lúng túng trong vấn đề chọn lựa phương pháp nào tối ưu cho dự án, cho hệ thống của họ; đồng thời làm sao sử dụng lại và nâng cấp từ những thuật toán hướng đối tượng đã được sử dụng trước đó. Điều này cũng gây trở ngại cho những người cần tìm hiểu về hệ thống đang tồn tại, vì tính ưu việt và đặc trưng của các ngôn ngữ hướng đối tượng nên họ thường hay khó khăn nhận biết các lớp, các đối tượng . kế thừa đặc biệt là trong các dự án lớn, hệ thống lớn Khi gặp một vấn đề, người thiết kế đã lựa chọn một phương pháp tối ưu, sao cho nó tốt nhất, phù hợp nhất, sử dụng dễ, giảm thiểu được độ phức tạp cũng như tiết kiệm công sức cho những lần phát triển lần sau, cũng như những lần tái sử dụng lại chúng. Thông thường khi tìm ra một giải pháp tốt, ta thường lưu lại để sử dụng chúng cho lần sau, để lần sau sẽ ít tốn thời gian để tìm hiểu mà vẫn có thể áp dụng chúng tốt. Chính vì dựa vào khái niệm mẫu thiết kế của Christopher Alexander khi áp dụng trong thiết kế các toà nhà, giúp cho người kiến trúc sư dựa vào một số khuôn dạng sẵn có mà thiết kế theo, hoặc cải tiến nó. Các chuyên gia trong vấn đề thiết kế và lập trình đã đúc rút ra kinh nghiệm để đưa ra một số 1 khuôn dạng chung về mẫu thiết kế phần mềm mà khi áp dụng đáp ứng được phần nào yêu cầu khắt khe của công nghệ phần mềm hiện đại. Và các nhà thiết kế sau này coi đó là một từ vựng chung để thiết kế cũng như khi áp dụng và hiểu chúng để lập trình. Trên thực tế không thể có một mẫu hoàn chỉnh cho phần mềm, nhưng chắc chắn có thể tìm ra một khuôn dạng chung hoàn chỉnh cho các mẫu này. 1.1. Khó khăn khi phát triển công nghệ phần mềm và sử dụng Mẫu thiết kế. Phân tích và thiết kế hướng đối tượng là khó, nhưng mục đích thiết kế hướng đối tượng nhằm được sử dụng lại lần sau lại càng khó hơn. Ta cần phải tìm ra các đối tượng, các phần(factor) thích hợp cho từng lớp, từng đối tượng, xác định được hệ thống giao diện cần phải kế thừa như thế nào và thiết lập mối quan hệ giữa chúng. Chính vì những phức tạp đó mà rất khó và lâu dài các chuyên gia mới tìm ra được một khuôn dạng chung cho phần mềm, mặt khác các dự án và các hệ thống phần mềm khi phát triển đều có mức độ trừu tượng hoá cao, nên ngôn ngữ đôi khi cũng ở mức trừu tượng hoá và rất khó cho người sử dụng khi tìm hiểu về chúng. Ngay cả các chuyên gia khi hoàn thành nghiên cứu cũng thừa nhận họ không hiều về những gì mà họ viết ra trong lần viết đầu tiên. Đặc biệt là khi hiểu được và thiết kế theo hướng đối tượng, để áp dụng các mẫu thiết kế này vào trong hệ thống, dự án của mình thì người áp dụng cần phải nắm rõ và vững ít nhất một ngôn ngữ lập trình hướng đối tượng và phải có kinh nghiệm trong thiết kế hướng đối tượng. Theo kinh nghiệm làm việc, và bằng chính khả năng của mình, cũng như độ nhạy cảm trong phân tích mà người phát triển mới có khả năng áp dụng chúng vào trong hệ thống của mình, và kết hợp chúng một cách tối ưu nhất. Tại Việt nam, do đây là một vấn đề mới, và rất khó để tìm hiểu nên chưa có nhóm nghiên cứu cụ thể nào về các mẫu thiết kế, và chúng hầu hết được áp dụng theo phán đoán của người thiết kế, do ngôn ngữ mang tính trừu tượng cao nên khó có thể áp dụng chúng một cách chính xác nhất để phát huy tính năng ưu việt của nó. Nhưng một khi đã áp dụng các mẫu này vào thiết kế thì người thiết kế sẽ thấy rất thuận lợi và giảm thiểu công sức cũng như độ phức tạp đi rất nhiều. Hiểu và áp dụng các mẫu thiết kế này vào trong hệ thống cũng là một tiêu chuẩn quan trọng của các nhà lập trình viên ở các nước công nghệ phần mềm phát triển. 2 1.2. Mục đích của đồ án. Mục đích của đồ án trong đợt thực tập tốt nghiệp và đồ án tốt nghiệp là nghiên cứu cụ thể và chi tiết đến các vấn đề nhỏ của các mẫu thiết kế mà trong đợt thực tập tốt nghiệp chưa có điều kiện tiếp cận và tìm hiểu đến và hoàn thiện một cách căn bản các hiểu biết về Design Patern. Đây là giai đoạn chuyển tiếp quan trọng và tiến hành các công việc áp dụng các mẫu thiết kế này vào trong thực tế, sử dụng các kiến thức đã nghiên cứu được cùng với các công cụ sẵn có như UML, C++, VC++ để thiết kế và áp dụng chúng một cách hoàn thiện và đầy đủ. Tuy nhiên, các mẫu thiết kế là một vấn đề rất khó, nó khó đối với cả những chuyên gia lập trình đầy kinh nghiệm, và bản thân nó cũng rất trừu tượng, đòi hỏi người tìm hiểu về nó phải có một kiến thưcs nhất định và rất cần thiết trên một mảng rộng các vấn đề, đặc biệt là cần phải có giác quan phán đoán mà chỉ có thể có được khi người đó có kiến thức vững về phần mềm, có kinh nghiệm chuyên sâu. Do kinh nghiệm thực tế chưa có nhiều, và cũng chưa có một tài liệu nào ở Việt Nam đã có nghiên cứu về vấn đề này, các tài liệu mà em tiếp xúc cũng như tìm hiểu đều là dựa theo các thông tin trong nghiên cứu của các chuyên gia mà cụ thể là của bốn chuyên gia: Erich Gamma, Richard Helm, Ralph Johnson và John Vlissides cùng với rất nhiều các nghiên cứu của các chuyên gia khác, và các dự án mà em tìm hiểu khi áp dụng các mẫu dự án này đều ở mức trừu tượng cao, mà để hiểu được nó, chỉ có các nhà lập trình và thiết kế dày dặn kinh nghiệm mới có thể hiểu được chúng một cách cặn kẽ và đầy đủ nhất. Vì vậy, trong đồ án này, em nghiên cứu tất cả 23 mẫu thiết kế mà được cụ thể hoá, và được coi là đầy đủ cho khuôn dạng chung của phần mềm hiện đại, nhưng để áp dụng được tất cả chúng là điều rất phức tạp, vì tuỳ vào từng dự án và từng hệ thống cụ thể mà ta có thể áp dụng từng mẫu thiết kế một, hay là ta kết hợp nhuần nhuyễn chúng để đưa ra hiệu quả cao nhất. Trên thực tế, ở nước ngoài cũng như ở Việt Nam, chưa có một dự án nào áp dụng đầy đủ 23 mẫu thiết kế này, và ở Việt Nam hiện nay cũng có ít công ty áp dụng chúng trong thiết kế. Trong quá trình nghiên cứu và tìm hiểu, em có điều kiện thực tập, và được tạo điều kiện tham gia vào nghiên cứu và áp dụng một số mẫu trong thiết kế dự án của công ty sản xuất phần mềm Khai Trí, và thấy được hiệu quả hơn hẳn khi áp dụng chúng vào trong thiết kế của dự án công ty. Đó là các mẫu: Abstract Factory Singleton Adapter 3 Facade Template Method State Method Factory Method Do đây là một dự án đươc phát triển và được nghiên cứu từ lâu, sản phẩm đưa ra thị trường và đã được chấp nhật một cách có hiệu qủa, và trong thực tế, nó đã đáp ứng được yêu cầu đòi hỏi của phần mềm hiện đại. Việc áp dụng các mẫu thiết kế này đã có kết quả cụ thể và thực tiễn trong sản phẩm của công ty. 1.3. Việc nghiên cứu đồ án giải quyết điều gì Như trên đã nói, các mẫu thiết kế là một vấn đề rất khó và rất trừu tượng, nó không phải là dễ cho những người mới tìm hiểu lần đầu, nhưng không thể thiếu nếu bạn muốn trở thành một chuyên gia lập trình. Nghiên cứu về các mẫu thiết kế trước hết là một nghiên cứu kỹ thuật phần mềm mới. Tất nhiên nhiên là nghiên cứu một cách cặn kẽ các vấn đề và chi tiết nhỏ ở từng mẫu thiết kế một là có thể nắm được một cách cơ bản và có thể áp dụng thực tế được. Kết quả của nghiên cứu này là một tài liệu làm việc về các mẫu thiết kế, với các nội dụng cụ thể để giúp cho bạn có thể phần nào hiểu được và phần nào áp dụng được trong thực tế. Nhưng muốn tìm hiểu sâu hơn, thì cần phải bằng chính khả năng của người cần tìm hiểu mới có thể rút ra được hiểu biết thấu đáo về các mẫu thiết kế. Sau đó là so sánh việc áp dụng các mẫu thiết kế này so với việc khi chưa áp dụng chúng. Trong nhiệm vụ này có thêm yêu cầu tìm hiểu dự án cụ thể và để từ đó thấy được khi áp dụng chúng thấy hiệu quả và phù hợp. Đồng thời đưa ra được một dự án cụ thể khi áp dụng chúng, và chi tiết hoá từng phần khi áp dụng và giải quyết vấn đề khi áp dụng các mẫu này. 1.4. Việc giải quyết đồ án ở giai đoạn tốt nghiệp được thực hiện như thế nào? Trong giai đoạn đồ án tôt nghiệp, em nghiên cứu thêm, vì đây là vấn đề khó và phức tạp, trở ngại lớn nhất là chưa có một nghiên cứu cụ thể nào ở Việt Nam, và được tham gia khi áp dụng chúng vào trong một dự án cụ thể. Trong lần thực hiện này, em phải nghiên cứu sâu hơn về UML, các kiến thức về Rational Rose, và các quy trình phần mềm. Do kiến thức thực tế chưa có nhiểu và hạn chế về thời gian để tìm hiểu về một dự án đã được phát triển từ lâu, cũng như thời 4 gian nâng cấp chúng nên hạn chế thời gian chưa sâu sắc vấn đề. Và tôi chỉ tập trung vào giải quyết một số mẫu trong dự án, phù hợp với dự án phát triển. Ngoài ra để áp dụng các mẫu thiết kế này còn yêu cầu rất nhiều nội dung nữa, tôi chỉ thực hiện nghiên cứu lý thuyết và chỉ áp dụng phần nào lý thuyết vào thực tế, và còn nhiều mẫu thiết kế chưa thể đưa vào dự án này được, đồng thời có ít điều kiện được nghiên cứu các dự án đã áp dụng các mẫu này ở Viêt nam cũng như các phần mềm cụ thể khác. 5 Chương 2 ĐẶT VẤN ĐỀ Tóm tắt chương Chương mở đầu này tôi xin được giới thiệu một số nét chung về đồ án tốt nghiệp mà tôi lựa chọn để thực hiện. Đồng thời, trong phần này, tôi cũng trình bày một số nét tổng quan về đề tài của đồ án tốt nghiệp, về những lý do, động cơ thúc đẩy nghiên cứu và tìm hiểu đề tài của tôi, về những mục đích đặt ra và yêu cầu của đề tài mà tôi đã nghiên cứu thực hiện trong thời gian qua. 2.1. Mục đích của đề tài Như tên của đề tài đồ án “ Các mẫu thiết kế phần mềm hướng đối tượng và áp dụng”, chính là thể hiện mục đích chính của đề tài. Việc nghiên cứu các mẫu dáng thiết kế không chỉ là nghiên cứu một kỹ thuật phân tích, thiết kế mới, mà hơn thế nữa là phương pháp tiếp cận khoa học và giải quyết vấn đề theo những phương pháp tối ưu hóa mà các chuyên gia phân tích , thiết kế và lập trình đã xây dựng thành các mẫu cụ thể. Nó giải quyết được những yêu cầu kiến thức cơ bản đối với người áp dụng và thiết kế theo các mẫu cũng như cần phải nắm rõ hơn để thiết kế tốt hơn, đáp ứng được yêu cầu của xu thế phát triển phần mềm hiện nay. 2.2. Giới thiệu bài toán, nhiệm vụ của đề tài Nhiệm vụ của đề tài có hai phần rất rõ ràng đó là : Nghiên cứu về Mẫu thiết kế Áp dụng Mẫu thiết kế đã nghiên cứu vào giải quyết một dự án và một số bài toán con. Về lý thuyết nghiên cứu về Mẫu thiết kế, tôi xin trình bày tổng quan về tư tưởng chính mang tính cốt lõi của các tác giả để phát triển và hình thành nên Mẫu thiết kế. Do Mẫu thiết kế không đơn thuần là một công nghệ mớI mà nó thực sự là một hướng tiếp cận mớI và đầy đủ cho các nhà lập trình và phân tích thiết kế. Vì Mẫu thiết kế chỉ thích hợp vớI các ngôn ngữ lập trình hướng đốI 6 tượng và cách phân tích thiết kế hướng đốI tượng. Trong khi sử dụng, nó không tách khỏI UML, cũng đã cho ta cách ứng dụng trực tiếp các mẫu thiết kế này. Về phần áp dụng Mẫu thiết kế vào thực hiện một dự án, tôi xin trình bày nộI dung của dự án lớn và phần thực hiện của tôi trong dự án lớn đó, là một phần của dự án nhỏ. Qua đó để bạn đọc xem được tổng quan về dự án lớn và nắm được chi tiết các ưu điểm của dự án này khi áp dụng Mẫu thiết kế vào thiết kế so vớI dự án khi áp dụng kiểu phân tích thiết kế cũ, cũng như nhìn ra được cách thiết kế giúp cho dự án được nâng cấp lên dựa trên bản thiết kế cũ. Dựa vào các thiết kế dự án cụ thể này mà ta có thể nhìn thấy rõ ràng cách thiết kế dựa trên Mẫu thiết kế và những ưu điểm của nó. 2.3. Lý do chọn đề tài. Làm phần mềm không chỉ là lập trình, tạo mã một cách đơn thuần để cuối cùng ra một chương trình có khả năng chạy được. Điều đó chỉ thích hợp với các dự án thật nhỏ, và rất nhỏ, hay đúng hơn là các chương trình đơn giản. Với các dự án phần mềm còn có rất nhiều điều quan trọng hơn thế, ở mức phân tích thiết kế, ở mức quản lý, phối kết hợp các nguồn nhân lực trong dự án một cách hiệu quả và thực tế thành công của các dự án phần mềm ngày càng nhiều phụ thuộc vào các yếu tố đó. Và cũng có nhiều lý thuyết, tư tưởng ra đời để thực hiện các công việc đó, đó là các mẫu thiết kế, hay còn gọi là Mẫu thiết kế. Trong nhà trường, tôi đã được học về phân tích thiết kế có cấu trúc, việc nghiên cứu thực sự sâu sắc về một phân tích thiết kế mới trong một dự án cụ thể là không có điều kiện , do hạn chế về thời gian. Và do nhận thức dự án, tầm quan trọng của thiết kế hướng đốI tượng đối với các dự án phần mềm, nên tôi chọn đề tài “Mẫu dáng thiết kế Mẫu thiết kế và ứng dụng” là đề tài tốt nghiệp của mình. Với tất cả các kiến thức cơ sở đã được học trong nhà trường cùng sự hướng dẫn của thầy, cũng như sự hướng dẫn nhiệt tình của project manager của công ty sản xuất phần mềm Khai Trí tôi cố gắng, tìm hiểu nghiên cứu Mẫu thiết kế, là những mẫu thiết kế được áp dụng nhiều và rất hiện đại hiện nay. Điều này, đối với một sinh viên chưa có thực tế thì hơn khó khăn vì nghiên cứu và hiểu các mẫu thiết kế và tham gia vào dự án cụ thể trong thực tế thì ngoài yêu cầu kiến thức ở mức nhất định thì cần thiết phải có những trải nghiệm thực tế. Tuy nhiên, điều đó chỉ là yếu tố khách quan, trong thời gian qua, được sự hướng dẫn tận tình của thầy giáo Phạm Đăng Hải, bộ môn khoa học máy tính, khoa Công nghệ thông tin, trường Đại học Bách Khoa Hà Nội, và sự cố gắng của bản thân, tôi đã thực hiện hoàn thành đề tài. Với việc nghiên cứu các mẫu thiết kế Mẫu thiết kế và ứng dụng nó vào thực tế, tôi nghĩ đó là một bước chuyển tiếp nghiên cứu rất quan trọng, từ hàn lâm sang công nghiệp, là bước chuẩn bị quan trọng. Do đó, theo tôi nghĩ đây là một đề tài rất hay, và thiết thực, và rất tin tưởng thực hiện đề tài này 7 Chương 3 TỔNG QUAN VỀ MẪU THIẾT KẾ 3.1. Lịch sử về mẫu dáng thiết kế. Theo các nghiên cứu của các chuyên gia trong việc thuận lợi của ngôn ngữ đã chỉ ra rằng kiến thức và kinh nghiệm không thể được tổ chức đơn giản xoay quanh vấn đề cú pháp. Nhưng trong các cấu trúc khái niệm lớn hơn như thuật toán, cấu trúc dữ liệu thì cần được lập kế hoạch và thiết kế một cách hoàn thiện. Người thiết kế không nghĩ đến cú pháp mà họ đang sử dụng để thiết kế nhiều như khi họ cố ghép các thiết kế hiện tại mà không phù hợp vớI thuật toán, cấu trúc dữ liệu và các căn bản ăn sâu mà họ đã học. Các nhà khoa học máy tính đã đặt tên và sắp xếp các thuật toán, cấu trúc dữ liệu nhưng họ không thường đặt tên cho các mẫu khác. Mẫu thiết kế cung cấp một từ vựng chung cho các nhà thiết kế để kết nốI, lập tài liệu và tìm hiểu thiết kế mới. Mẫu thiết kế làm cho hệ thống đơn giản hơn bằng cách hiểu nó dựa trên mức trừu tượng hoá cao hơn là các ký pháp thiết kế hoặc ngôn ngữ lập trình. Mẫu thiết kế làm tăng mức độ thiết kế giúp các thành viên trong một nhóm có thể dễ dàng hiểu và thảo luận cùng nhau trong một vấn đề cần giải quyết. Biết được các mẫu dáng thiết kế giúp cho ta hiểu dễ dàng về các hệ thống hiện tại. Hầu hết các hệ thống hướng đối tượng sử dụng các mẫu thiết kế này. Những người nghiên cứu chương trình hướng đốI tượng thường phàn nàn rằng các hệ thống đã từng nghiên cứu hoặc thực hiện sử dụng tính kế thừa rất phức tạp khó có thể kiểm soát được chúng. Thực tế xảy ra rất nhiều vì họ không hiểu được các mẫu thiết kế trong hệ thống. Các mẫu dáng thiết kế giúp người nghiên cứu trở thành một nhà thiết kế giỏi hơn, hơn thế nữa, mô tả hệ thống theo các mẫu thiết kế sẽ làm cho hệ thống dễ hiểu hơn. Do có vốn từ vựng chung nên bạn không phải mô tả toàn bộ các mẫu thiết kế, chỉ cần đặt tên cho mẫu thiết kế đó, thì người đọc sẽ hiểu rõ ràng về vấn đề đó như thế nào? Chúng ta sử dụng chúng để đặt tên cho các lớp, để nghiên cứu tốt hơn và thiết kế để mô tả các mẫu thiết kế. 3.1.1. Mục đích của các mẫu thiết kế. Giúp cho người thiết kế tái sử dụng lại thành công bởi việc dựa trên nền thiết kế mới và kinh nghiệm. Một nhà thiết kế áp dụng chúng và hiểu được chúng nhanh chóng mà không cần phải tìm hiểu và thiết kế lại chúng. Làm cho tái sử dụng lại các thiết kế và phân tích tốt hơn. 8 Mẫu thiết kế là một kỹ thuật mới giúp cho người phát triển của hệ thống mới dễ dàng truy nhập hơn. Mẫu thiết kế giúp cho việc lựa chọn thiết kế có thứ tự làm cho hệ thống tối ưu và tránh được những rủi ro không đáng có. 3.1.2. Các mẫu thiết kế giải quyết vấn đề như thế nào? Tìm kiếm đối tượng thích hợp: Cái khó của phân tích thiết kế hướng đối tượng là phân tích hệ thống thành các đối tượng, chúng đều ảnh hưởng đến phân tích, thường xuyên phương pháp hoá cách tiếp cận Xác định tính chất của đối tượng: Các đối tượng có thể biến đổi lớn về số lượng và kích cỡ, chúng có thể biểu diễn mọi thứ, và có thể tổng thể ứng dụng lựa chọn các đối tượng như thế nào để phù hợp bài toán và khả năng chia nhỏ đối tượng lớn thành các đối tượng nhỏ hơn, là một vấn đề cần phải có quyết định đúng. Định nghĩa giao diện đối tượng: Mẫu thiết kế giúp xác định giao diện bằng cách nhận dạng các khoá thành phần của nó và các dạng dữ liệu được nhận biết qua giao diện. Mẫu thiết kế còn xác định mối quan hệ giữa các giao diện. Đặc biệt chúng còn yêu cầu một số lớp có giao diện tương tự nhau, hoặc chúng định vị trí các ràng buộc trong giao thức của những lớp này. Xác định các thực hiện đối tượng: Cách thực hiện của đối tượng được thông qua các lớp của nó. Một lớp được chỉ ra dữ liệu bên trong đối tượng và biểu diễn , xác định các thao tác các đối tượng thực hiện Lớp và giao thức kế thừa: Theo quy tắc: Programming to an Interface, not an Implementation Vấn đề tái sử dụng và tham số hoá các dạng Mẫu thiết kế. 3.1.3. Các phương pháp để chọn các mẫu thiết kế Phải tìm được các Mẫu thiết kế nào là phù hợp với vấn đề nhất, do đó có một số cách tiếp cận sau: Đi đến quyết định các Mẫu thiết kế giải quyết vấn đề như thế nào? Kiểm tra các nội dung mục đích cần sử dụng. Nghiên cứu các mẫu có liên quan với nhau như thế nào. Nghiên cứu các mẫu phù hợp với mục đích. Kiểm tra nguyên nhân thiết kế lại. Xem xét những vấn đề có thể thay đổi trong thiết kế của bạn. 9 3.1.4. Làm thế nào để thiết kế một mẫu thiết kế Khi chọn được Mẫu thiết kế làm thế nào để sử dụng ?. Nghiên cứu về mẫu đó. Nghiên cứu các thành phần cấu trúc và các vấn đề liên quan. Lựa chọn các tên cho các phần mẫu mà hiệu quả trong ngữ cảnh. Xác định các lớp. Khai báo giao diện, xác lập quan hệ thừa kế và xác định các trường hợp biến biểu diễn dữ liệu và kết quả đối tượng. Nhận dạng các lớp hiện có trong ứng dụng của bạn mà mẫu sẽ tác động sửa đổi chúng cho phù hợp. Xác định ứng dụng, các tên đặc trưng cho các thao tác trong mẫu Thực hiện các thao tác để đưa ra quyền hạn trách nhiệm và cộng tác trong các mẫu. 3.2. Các mẫu dáng thiết kế (Mẫu thiết kế) 3.2.1. Khái quát chung về Mẫu thiết kế. Mẫu thiết kế định tên, thúc đẩy và giải thích một cách có hệ thống các thiết kế mà được địa chỉ hoá trong hệ thống hướng đối tượng. Nó mô tả vấn đề, giải pháp, khi áp dụng các giải pháp và các kết quả của nó. Nó cũng nêu ra các gợi ý và các ví dụ cụ thể trong từng bước thực hiện. Giải pháp là sự sắp sếp các đối tượng và các lớp để giải quyết vấn đề. Giải pháp được tuỳ biến và thực hiện để giải quyết các vấn để trong từng ngữ cảnh riêng biệt. Chúng tôi chia các mẫu thiết kế theo hai tiêu chí. Tiêu chí đầu tiên, là mục đích, ánh xạ những vấn đề mà mẫu thiết kế thực hiện. Các mẫu có thể thuộc vào một trong những mục đích như khởi tạo, cấu trúc và hoạt động. Các mẫu khởi tạo liên quan đến quá trình tạo đối tượng, các mẫu cấu trúc( structural mẫu) giải quyết thành phần của các lớp và các đối tượng. Các mẫu hoạt động( behavioral mẫu) cụ thể hoá phương pháp mà các lớp và các đối tượng thực hiện và phân quyền trách nhiệm. Theo tiêu chí thứ hai, là phạm vi (scope), định nghĩa liệu mẫu áp dụng đầu tiên vào các lớp các đối tượng. Các mẫu class giải quyết mối quan hệ giữa các lớp và các lớp con của nó. Mối quan hệ này được thiết lập thông 10