1. Trang chủ
  2. » Công Nghệ Thông Tin

C 3.0 Design Pattern Chương1

7 285 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 111,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Hướng đối tượng, đó là cơ sở để lập trình ngày nay, chỉ xuất hiện vào lúc thịnh hành trong những năm 1990, và generics mà các lớp chứa hiện đại của chúng ta như stacks, maps, và lists dự

Trang 1

CHƯƠNG I: C# THÍCH HỢP DESIGN PATTERNS

Điều gì làm cho một lập trình viên thành công và hạnh phúc? Những gì góp phần làm điều đó tuyệt vời "Gotcha!" Cảm giác bạn nhận được khi chương trình của bạn cuối cùng cũng biên dịch và chạy một cách chính xác,

và bạn biết rằng nó là thanh lịch như nó có thể? Làm thế nào bạn quản lý để làm cho nó thanh lịch trong khi đồng thời thỏa mãn tất cả các yêu cầu bình thường (linh hoạt, bảo trì, độ tin cậy, và có thể dùng lại, để tên một vài thứ khác)? Và tại sao một số lập trình viên có thể đạt được mức độ thanh lịch nhanh hơn rất nhiều so với những người khác?

Nó sẽ rất dễ dàng nếu nói rằng một số người được sinh ra để lập trình

và một số thì không Tuy nhiên, ngay cả những lập trình viên xuất sắc nhất sẽ ngồi hàng giờ hoặc thậm chí nhiều ngày nghiền ngẫm một màn hình duy nhất

có các dòng mã, biết nó không phải là hoàn toàn đúng và phải vật lộn để làm cho nó tốt hơn Câu trả lời là một lập trình viên thành công có hai công cụ chính: một ngôn ngữ lập trình tốt và các mẫu thiết kế Cuốn sách này là dành cho việc thấy cách kết hợp này hoạt động cùng nhau tuyệt vời để đưa lập trình viên thông thường vào các lĩnh vực của các chuyên gia

Những người đã có kinh nghiệm lập trình lâu dài sẽ đánh giá cao thời gian đó sẽ đem lại các cải tiến cho một ngôn ngữ Điều đơn giản mà chúng ta cho là hiển nhiên hiện nay giống như kiểm tra kiểu của các biến là không tồn tại hoặc là tùy chọn trong các ngôn ngữ của những năm 1970 Hướng đối tượng, đó là cơ sở để lập trình ngày nay, chỉ xuất hiện vào lúc thịnh hành trong những năm 1990, và generics mà các lớp chứa hiện đại của chúng ta như stacks, maps, và lists dựa vào chỉ là một dự án nghiên cứu cách đây năm năm

Các lập trình viên thành công thường theo kịp sự cải tiến trong ngôn ngữ, nhưng thường nó không phải là rõ ràng ngay cả với một người chuyên nghiệp dày dạn cũng không biết làm thế nào một tính năng mới cụ thể sẽ có ích Một số tính năng, chẳng hạn như các thuộc tính tự động (Chương 3) và khởi tạo bộ sưu tập (Chương 3), có khả năng ngay lập tức tìm thấy một chỗ trong các tính năng hay dùng của của bạn, những thứ khác, chẳng hạn như phương thức mở rộng (Chương 2), là trừu tượng hơn một chút

Ví dụ là cần thiết để minh họa cho các tiện ích của nhiều tính năng ngôn ngữ mới nổi nhưng khi viết ví dụ minh họa, chúng cũng có thể mơ hồ bởi vì chúng được hướng tới giải quyết các vấn đề cụ thể Đưa ra một ví dụ về cách làm việc với các vòng lặp một người quản lý cây gia đình (Chương 9), bạn sẽ có thể tái sử dụng chúng cho một chương trình phòng chat được không? Sự kết nối không phải rõ ràng ở tất cả và có thể dễ dàng bỏ qua Nhập các mẫu thiết kế, là cuối cùng trong kết nối tâm trí cho lập trình viên thành công

Trang 2

Các mẫu thiết kế đóng gói các cách phổ biến của việc giải quyết vấn đề bằng cách sử dụng tính năng ngôn ngữ cùng với nhau

Design patterns cung cấp một ngôn ngữ cấp cao cho lập trình viên để

mô tả hệ thống của họ và thảo luận về các giải pháp cho các vấn đề chung Ngôn ngữ này bao gồm tên của patterns được nhận ra và các yếu tố của chúng Việc sử dụng đúng và thông minh của các mẫu sẽ hướng dẫn một nhà phát triển vào việc thiết kế một hệ thống phù hợp với thực tiễn trước khi được thành lập, mà không dập tắt sự đổi mới Trên thị trường, các mẫu thiết kế giúp nâng cao tính di động của các chuyên gia và các trị giá kiến thức của họ, khi

họ cung cấp một mẫu phổ biến, nhận ra cơ sở để giải quyết vấn đề

Các mẫu có tên minh họa và được mô tả bằng sơ đồ minh họa vai trò của chúng Chỉ có 23 mẫu cổ điển (ít hơn các chữ cái trong bảng chữ cái tiếng Anh), và một lập trình viêtn tốt có thể học được tên và công dụng của tất cả chúng với một số thực hành Khi phải đối mặt với lựa chọn thiết kế, Các lập trình viên đó không còn phải chọn tính năng ngôn ngữ, chẳng hạn như thừa

kế, giao diện, hoặc các delegate Thay vào đó họ có thể thực hiện trên bức tranh lớn hơn: một blog sẽ phù hợp với một mô hình Observer (Chương 9), một hệ thống mạng lưới cộng đồng sẽ cần một Proxy (Chương 2), và cứ như vậy Yếu tố quyết định không được gỡ ra, mà nó được nâng lên một mức độ cao hơn

Vì vậy, mọi người quyết định làm thế nào một mẫu thiết kế được thực thi trong một ngôn ngữ? Sách giống như thế này và các bài viết trên các trang web trình bày việc triển khai các mẫu, cùng với hướng dẫn về cách chọn một

mô hình và thậm chí làm thế nào để lựa chọn giữa các triển khai thay thế (nếu có) Tuy nhiên, sức hút của sự tùy biến là rất mạnh mẽ, và thường các mẫu đều có phần chỉ sử dụng các tính năng ngôn ngữ của những năm 1980 Không phải là quá trong cuốn sách này C# 3.0 Design Patterns nhằm mục đích trình bày 23 mẫu cổ điển trong phong cách của C# 3.0 tốt nhất có thể, đảm bảo rằng những gì bạn học ở đây sẽ có giá trị thực sự cho bạn trong nhiều năm tới

Giới thiệu Patterns

Các mẫu thiết kế được giới thiệu trong hội thảo của Erich Gamma, Richard Helm, Ralph Johnson và John Vlissides viề Design Patterns: Các bộ phận có thể sử dụng lại trong phần mềm hướng đối tượng (Addison-Wesley) Cuốn sách xác định và mô tả 23 mẫu đã hình thành nền tảng của bất cứ nghiên cứu nào về chủ đề này, mà vẫn được coi là các mẫu cốt lõi cần thiết dến giờ

Các mẫu cốt lõi giải quyết vấn đề trong lập trình hướng đối tượng chính thống (OOP), và việc triển khai ban đầu đã được trình bày trong C+ + và Smalltalk (các ngôn ngữ OOP chính tại thời điểm được phát triển) Kể từ đó, những cuốn sách khác đã thực hiện các mẫu trong Java, Visual Basic, và C#

Trang 3

Như giá trị của các khái niệm về pattern đã được chấp nhận, mẫu mới đã được

đề xuất để thêm vào danh sách ban đầu Ngoài ra, hiện nay có những mẫu được áp dụng cho các khu vực cụ thể, chẳng hạn như kiến trúc phần mềm, giao diện người dùng, tương tranh, và an ninh Mặc dù các mẫu cực kỳ quan trọng trong lĩnh vực của chúng, liên kết của chúng bị phân mảnh, và tập hợp cốt lõi của các mẫu được chấp nhận chưa được mở rộng

Như đã nêu trong Lời nói đầu, các cuộc thảo luận của mỗi pattern trong cuốn sách này bao gồm một mô tả ngắn gọn về vai trò của nó, một lời minh hoạ, xem xét thiết kế và thực thi của nó, và một ví dụ, theo sau là một cuộc thảo luận về công dụng của nó và một số bài tập Tính năng mới của ngôn ngữ C # được giới thiệu nơi mẫu được rút ra trên chúng, do đó, bạn sẽ tìm hiểu thêm về ngôn ngữ như bạn tìm hiểu về các mô hình

23 mô hình được chia thành ba nhóm: sáng tạo, kết cấu, và hành vi Trong một nhóm, tuy không có thứ tự vốn có, và sắp đặt thứ tự chữ cái theo truyền thống là được mặc định Trong cuốn sách này, chúng tôi có một cách tiếp cận sáng tạo bởi các mô hình liên quan đến các tính năng ngôn ngữ mà chúng yêu cầu và giới thiệu chúng theo thứ tự theo sự phức tạp của ngôn ngữ Một số mẫu trong mỗi nhóm chỉ cần thừa kế, giao diện, và nó tạo tinh thần để giải quyết những thứ đầu tiên chỉ cần được tập trung vào các mô hình tự thân

và chưa phải nói về ngôn ngữ Các mẫu mà phải sử dụng các các tính năng ngôn ngữ cao hơn (generics, indexers, và delegates) được trình bày sau Tính năng mới của C# như vậy có thể được giới thiệu như là chúng ta đi theo, chứ không phải là trong một giới thiệu độc lập hoặc phụ lục Một chỉ mục toàn diện bổ sung cho phương pháp này

Một tính năng quan trọng của bất kỳ cuốn sổ tay về mẫu là cái nhìn sâu sắc mà nó mang lại khi sử dụng các mẫu trong các hệ thống thực Biết rằng mẫu Facade thường được sử dụng trong xây dựng trình biên dịch, hoặc bộ điều hợp được phổ biến trong các Frameworks đồ họa nổi tiếng, củng cố tầm quan trọng của chúng và giúp trực tiếp sử dụng chúng Tuy nhiên, trong các

hệ thống lớn mẫu thường ít khi được tìm thấy trong sự cô lập, và thường chúng làm việc cùng nhau Mẫu Singleton, ví dụ, thường được sử dụng kết hợp với mẫu khác khi cần thiết để tạo ra chỉ có một phiên bản của một thành phần Do đó, sự chú ý đáng kể được đưa ra ở cuối mỗi chương để nói về giá trị so sánh của các mẫu đã khám phá

Về UML

Một phần quan trọng trong mô tả của mỗi pattern là một sơ đồ lớp Modeling Language Unified * (UML) UML là một cách mô tả phần mềm ở dạng sơ đồ được chấp nhận rộng rãi Các sơ đồ trong cuốn sách sử dụng các đặc điểm UML chia thành từng nhóm trong Bảng 1-1

Bảng 1-1 Ký hiệu sơ đồ lớp UML

Phần tử chương trình Phần tử lược dồ Ý nghĩa

Trang 4

Class (Lớp) Dạng và các thông số quy

định rất quan trọng khi truy cập được chỉ ra bởi + (public), (private), và # (protected).

như lớp trừu tượng

thành phần của nhau.

Association one way (1

chiều)

A có thể gọi và truy cập các thành phần của B, nhưng ngược lại là không được Aggregation (tổng hợp) A có một B, và B có thể

sống lâu hơn A.

vào A.

Trang 5

Có ba loại khối, cho các class (lớp), interface (giao diện) / abstract classes (lớp trừu tượng), và các gói (packge) Lớp là thành phần sơ đồ phổ biến nhất và chứa các chi tiết một số thứ của nó tương ứng với các thuộc tính (attributes) (hoặc các trường (field)) và các hoạt động (operations ) (hoặc phương thức (methods)) quan trọng của lớp C# Một sơ đồ UML không phải

là một bản sao chính xác của một chương trình, và do đó chỉ có các yếu tố quan trọng đối với mô hình đang được xem xét là được hiển thị Khả năng truy cập của tất cả các thuộc tính và các hoạt động (private, public, hoặc protected) được chỉ định Mặc định cho các thuộc tính là private và cho các hoạt động là public Sai lệch so với giá trị mặc định sẽ được đánh dấu khi chúng xảy ra

Các loại liên kết với các thuộc tính và các hoạt động thường không được đưa ra Tuy nhiên, khi chúng quan trọng, chúng có thể được đưa vào sau khi nhận diện, ngăn cách bởi dấu hai chấm Cách tiếp cận thoải mái cùng áp dụng cho các thông số của phương thức, mà thường không thể hiện trong một

sơ đồ

Ghi chú là rất hữu ích cho việc giải thích các mối quan hệ, chẳng hạn như khi một phương thức trong một lớp gọi một phương thức đặc biệt khác, khi thông tin này có liên quan trực tiếp đến mô hình Trong hầu hết các trường hợp, thường, sáu loại đường nối đã cung cấp đủ thông tin Mẫu Decorator, mà chúng ta sẽ xem xét đầu tiên, có một sơ đồ phong phú một cách hợp lý và nó

sẽ được sử dụng để giải thích các đường nối chi tiết hơn

Về C# 3.0

Một mục tiêu của cuốn sách này là trình bày C# trong style tốt nhất của

nó Phiên bản chúng tôi đang sử dụng là C# 3.0 trên NET Framework 3.5 Beta 2 (August 2007)

C# 1.0 ra đời vào tháng 12 năm 2002, thể hiện nhiều nghiên cứu trong OOP đã diễn ra kể từ Java đã được đưa ra bảy năm trước đây C# 2.0 được phát hành dưới dạng cuối cùng trong tháng 9 năm 2005, và các tiêu chuẩn ECMA đã được tạo sẵn trong tháng 6 năm 2006 C# 2.0 thêm năm tính năng đáng kể so với C# 1.0, hầu hết trong số đó được sử dụng trong các mẫu ở cuốn sách này:

• Generics cho phép các lớp, cấu trúc, giao diện, các delegate, và phương thức được tham số bởi các loại dữ liệu mà chúng lưu trữ và thao tác

• Phương thức vô danh (Anonymous method) cho phép các đoạn mã được viết "nội tuyến", nơi các giá trị delegate được dự kiến

• Iterators, đó là phương thức để lặp từng bước tính toán và trình tự của các giá trị yield

Trang 6

• Kiểu Partial cho phép các lớp, cấu trúc, và các giao diện được chia thành nhiều phần được lưu trữ trong các tập tin nguồn khác nhau để phát triển và bảo trì dễ dàng hơn

• Kiểu Nullable đại diện cho các giá trị mà có thể là chưa biết, chúng hỗ trợ tất cả các giá trị có thể của một kiểu tiềm ẩn cộng với một trạng thái

vô giá trị nào đó

Theo Microsoft, việc tiếp tục nâng cấp ngôn ngữ, với sự nhấn mạnh đặc biệt về sự hội nhập của giao tiếp cơ sở dữ liệu SQL và yêu cầu dạng liên kết động Báo cáo về phiên bản 3.0 của ngôn ngữ, hoàn thành tháng 5 năm 2006, bao gồm những tiến bộ đáng kể trong việc tích hợp các mô hình lập trình chức năng và cơ sở dữ liệu vào dòng chính của hướng đối tượng:

• Dạng ngầm định của các biến địa phương, cho phép các kiểu biến địa phương được suy ra từ các biểu thức sử dụng để khởi tạo chúng

• Phương thức mở rộng (Extension methods), mà làm cho nó có thể mở rộng và xây dựng các kiểu hiện có với phương pháp bổ sung, bên ngoài định nghĩa của chúng

• Biểu thức lambda, một sự tiến hóa của phương thức vô danh cung cấp

sự cải thiện khả năng suy luận kiểu và chuyển đổi cho cả delegate và expression trees

• Khối khởi tạo đối tượng, trong đó dễ dàng xây dựng và khởi tạo các đối tượng

• Kiểu nặc danh, đó là các kiểu được tự động suy ra và được tạo ra từ khối khởi tạo đối tượng

• Dạng ngầm định của mảng, đó là một dạng sáng tạo và khởi tạo mảng, các loại phần tử của mảng được suy ra từ bộ khởi tạo

• Biểu thức truy vấn, trong đó cung cấp một cú pháp ngôn ngữ tích hợp cho các truy vấn tương tự như ngôn ngữ truy vấn quan hệ và phân cấp, chẳng hạn như SQL và XQuery

Tất cả những tính năng mới được sử dụng một cách tự nhiên trong cuốn sách này Để có cái nhìn đầy đủ chi tiết về toàn bộ ngôn ngữ C# 3.0, xem tài liệu tham khảo có sẵn tại http://msdn2.microsoft.com/vcsharp

Về các ví dụ

Gần 40 chương trình ví dụ đầy đủ trong cuốn sách này đã được tạo ra một cách cẩn thận để đáp ứng các tiêu chí sau:

• Chúng được lập trình trong không quá 180 dòng, và thường là 100

• Chúng có liên quan đến các hệ thống máy tính thực

• Chúng có thể mở rộng ra nhiều chức năng hơn

Trang 7

Bạn sẽ tìm thấy các chương trình liên quan đến hệ thống thực tế, chẳng hạn như Flickr và Facebook, cũng như các phòng chat, game, và các blog Chúng tôi cũng sẽ giải quyết các chủ đề như các hệ thống nhúng và sản xuất Một số ví dụ truyền thống (để làm với ngân hàng và chấm điểm sinh viên, là

ví dụ) được đưa vào rất tốt, nhưng đối với hầu hết các phần, các ví dụ là mới

và chưa được thấy trước đây trong cuốn sách thuộc loại này Một yếu tố quan trọng là, nhờ sự kết hợp của các mẫu thiết kế và sử dụng khéo léo C# 3.0, chương trình này khá ngắn Ví dụ không đủ ngắn để hiển thị đầy đủ trong một cuốn sách trước đây thì bây giờ là lý do hoàn hảo để đưa ra

Ngày đăng: 27/08/2017, 14:22

TỪ KHÓA LIÊN QUAN

w