CHƯƠNG I: C# THÍCH HỢP DESIGN PATTERNS Điều làm cho lập trình viên thành công hạnh phúc? Những góp phần làm điều tuyệt vời "Gotcha!" Cảm giác bạn nhận chương trình bạn cuối biên dịch chạy cách xác, bạn biết lịch có thể? Làm bạn quản lý để làm cho lịch đồng thời thỏa mãn tất yêu cầu bình thường (linh hoạt, bảo trì, độ tin cậy, dùng lại, để tên vài thứ khác)? Và số lập trình viên đạt mức độ lịch nhanh nhiều so với người khác? Nó dễ dàng nói số người sinh để lập trình số không Tuy nhiên, lập trình viên xuất sắc ngồi hàng chí nhiều ngày nghiền ngẫm hình có dòng mã, biết hoàn toàn phải vật lộn để làm cho tốt Câu trả lời lập trình viên thành công có hai công cụ chính: ngôn ngữ lập trình tốt mẫu thiết kế Cuốn sách dành cho việc thấy cách kết hợp hoạt động tuyệt vời để đưa lập trình viên thông thường vào lĩnh vực chuyên gia Những người có kinh nghiệm lập trình lâu dài đánh giá cao thời gian đem lại cải tiến cho ngôn ngữ Điều đơn giản mà cho hiển nhiên giống kiểm tra kiểu biến không tồn tùy chọn ngôn ngữ năm 1970 Hướng đối tượng, sở để lập trình ngày nay, xuất vào lúc thịnh hành năm 1990, generics mà lớp chứa đại stacks, maps, lists dựa vào dự án nghiên cứu cách năm năm Các lập trình viên thành công thường theo kịp cải tiến ngôn ngữ, thường rõ ràng với người chuyên nghiệp dày dạn làm tính cụ thể có ích Một số tính năng, chẳng hạn thuộc tính tự động (Chương 3) khởi tạo sưu tập (Chương 3), có khả tìm thấy chỗ tính hay dùng của bạn, thứ khác, chẳng hạn phương thức mở rộng (Chương 2), trừu tượng chút Ví dụ cần thiết để minh họa cho tiện ích nhiều tính ngôn ngữ viết ví dụ minh họa, chúng mơ hồ chúng hướng tới giải vấn đề cụ thể Đưa ví dụ cách làm việc với vòng lặp người quản lý gia đình (Chương 9), bạn tái sử dụng chúng cho chương trình phòng chat không? Sự kết nối rõ ràng tất dễ dàng bỏ qua Nhập mẫu thiết kế, cuối kết nối tâm trí cho lập trình viên thành công Các mẫu thiết kế đóng gói cách phổ biến việc giải vấn đề cách sử dụng tính ngôn ngữ với Design patterns cung cấp ngôn ngữ cấp cao cho lập trình viên để mô tả hệ thống họ thảo luận giải pháp cho vấn đề chung Ngôn ngữ bao gồm tên patterns nhận yếu tố chúng Việc sử dụng thông minh mẫu hướng dẫn nhà phát triển vào việc thiết kế hệ thống phù hợp với thực tiễn trước thành lập, mà không dập tắt đổi Trên thị trường, mẫu thiết kế giúp nâng cao tính di động chuyên gia trị giá kiến thức họ, họ cung cấp mẫu phổ biến, nhận sở để giải vấn đề Các mẫu có tên minh họa mô tả sơ đồ minh họa vai trò chúng Chỉ có 23 mẫu cổ điển (ít chữ bảng chữ tiếng Anh), lập trình viêtn tốt học tên công dụng tất chúng với 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 chọn tính ngôn ngữ, chẳng hạn thừa kế, giao diện, delegate Thay vào họ thực tranh lớn hơn: blog phù hợp với mô hình Observer (Chương 9), hệ thống mạng lưới cộng đồng cần Proxy (Chương 2), Yếu tố định không gỡ ra, mà nâng lên mức độ cao Vì vậy, người định làm mẫu thiết kế thực thi ngôn ngữ? Sách giống viết trang web trình bày việc triển khai mẫu, với hướng dẫn cách chọn mô hình chí làm để lựa chọn triển khai thay (nếu có) Tuy nhiên, sức hút tùy biến mạnh mẽ, thường mẫu có phần sử dụng tính ngôn ngữ năm 1980 Không phải sách C# 3.0Design Patterns nhằm mục đích trình bày 23 mẫu cổ điển phong cách C# 3.0 tốt có thể, đảm bảo bạn học có giá trị thực cho bạn nhiều năm tới Giới thiệu Patterns Các mẫu thiết kế giới thiệu hội thảo Erich Gamma, Richard Helm, Ralph Johnson John Vlissides viề Design Patterns: Các phận sử dụng lại phần mềm hướng đối tượng (Addison-Wesley) Cuốn sách xác định mô tả 23 mẫu hình thành tảng nghiên cứu chủ đề này, mà coi mẫu cốt lõi cần thiết dến Các mẫu cốt lõi giải vấn đề lập trình hướng đối tượng thống (OOP), việc triển khai ban đầu trình bày C+ + Smalltalk (các ngôn ngữ OOP thời điểm phát triển) Kể từ đó, sách khác thực mẫu Java, Visual Basic, C# Như giá trị khái niệm pattern chấp nhận, mẫu đề xuất để thêm vào danh sách ban đầu Ngoài ra, có mẫu áp dụng cho khu vực cụ thể, chẳng hạn kiến trúc phần mềm, giao diện người dùng, tương tranh, an ninh Mặc dù mẫu quan trọng lĩnh vực chúng, liên kết chúng bị phân mảnh, tập hợp cốt lõi mẫu chấp nhận chưa mở rộng Như nêu Lời nói đầu, thảo luận pattern sách bao gồm mô tả ngắn gọn vai trò nó, lời minh hoạ, xem xét thiết kế thực thi nó, ví dụ, theo sau thảo luận công dụng số tập Tính ngôn ngữ C # giới thiệu nơi mẫu rút chúng, đó, bạn tìm hiểu thêm ngôn ngữ bạn tìm hiểu mô hình 23 mô hình chia thành ba nhóm: sáng tạo, kết cấu, hành vi Trong nhóm, thứ tự vốn có, đặt thứ tự chữ theo truyền thống mặc định Trong sách này, có cách tiếp cận sáng tạo mô hình liên quan đến tính ngôn ngữ mà chúng yêu cầu giới thiệu chúng theo thứ tự theo phức tạp ngôn ngữ Một số mẫu nhóm cần thừa kế, giao diện, tạo tinh thần để giải thứ cần tập trung vào mô hình tự thân chưa phải nói ngôn ngữ Các mẫu mà phải sử dụng các tính ngôn ngữ cao (generics, indexers, delegates) trình bày sau Tính C# giới thiệu theo, giới thiệu độc lập phụ lục Một mục toàn diện bổ sung cho phương pháp Một tính quan trọng sổ tay mẫu nhìn sâu sắc mà mang lại sử dụng mẫu hệ thống thực Biết mẫu Facade thường sử dụng xây dựng trình biên dịch, điều hợp phổ biến Frameworks đồ họa tiếng, củng cố tầm quan trọng chúng giúp trực tiếp sử dụng chúng Tuy nhiên, hệ thống lớn mẫu thường tìm thấy cô lập, thường chúng làm việc Mẫu Singleton, ví dụ, thường sử dụng kết hợp với mẫu khác cần thiết để tạo có phiên thành phần Do đó, ý đáng kể đưa cuối chương để nói giá trị so sánh mẫu khám phá Về UML Một phần quan trọng mô tả pattern sơ đồ lớp Modeling Language Unified * (UML) UML cách mô tả phần mềm dạng sơ đồ chấp nhận rộng rãi Các sơ đồ sách sử dụng đặc điểm UML chia thành nhóm 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 Class (Lớp) Dạng thông số quy định quan trọng truy cập + (public), (private), # (protected) Interface (Giao diện) Tên bắt đầu chữ I, dùng lớp trừu tượng Note (Ghi Chú) Văn mô tả Package (Gói) Nhóm lớp giao diện Inheritance (Kế thừa) B kế thừa từ A Realization (Thực hiện) B Thực thi A Association (Kết hợp) A B gọi truy cập thành phần Association one way (1 chiều) A gọi truy cập thành phần B, ngược lại không Aggregation (tổng hợp) A có B, B sống lâu A Composition (thành phần) A có B, B phụ thuộc vào A Có ba loại khối, cho class (lớp), interface (giao diện) / abstract classes (lớp trừu tượng), gói (packge) Lớp thành phần sơ đồ phổ biến chứa chi tiết số thứ tương ứng với thuộc tính (attributes) (hoặc trường (field)) hoạt động (operations ) (hoặc phương thức (methods)) quan trọng lớp C# Một sơ đồ UML xác chương trình, có yếu tố quan trọng mô hình xem xét hiển thị Khả truy cập tất thuộc tính hoạt động (private, public, protected) định Mặc định cho thuộc tính private cho hoạt động public Sai lệch so với giá trị mặc định đánh dấu chúng xảy Các loại liên kết với thuộc tính hoạt động thường không đưa Tuy nhiên, chúng quan trọng, chúng đưa vào sau nhận diện, ngăn cách dấu hai chấm Cách tiếp cận thoải mái áp dụng cho thông số phương thức, mà thường sơ đồ Ghi hữu ích cho việc giải thích mối quan hệ, chẳng hạn phương thức lớp gọi phương thức đặc biệt khác, thông tin có liên quan trực tiếp đến mô hình Trong hầu hết trường hợp, thường, sáu loại đường nối cung cấp đủ thông tin Mẫu Decorator, mà xem xét đầu tiên, có sơ đồ phong phú cách hợp lý sử dụng để giải thích đường nối chi tiết Về C# 3.0 Một mục tiêu sách trình bày C# style tốt Phiên sử dụng C# 3.0 NET Framework 3.5 Beta (August 2007) C# 1.0 đời vào tháng 12 năm 2002, thể nhiều nghiên cứu OOP diễn kể từ Java đưa bảy năm trước C# 2.0 phát hành dạng cuối tháng năm 2005, tiêu chuẩn ECMA tạo sẵn tháng năm 2006 C# 2.0 thêm năm tính đáng kể so với C# 1.0, hầu hết số sử dụng mẫu sách này: • Generics cho phép lớp, cấu trúc, giao diện, delegate, phương thức tham số loại liệu mà chúng lưu trữ thao tác • Phương thức vô danh (Anonymous method) cho phép đoạn mã viết "nội tuyến", nơi giá trị delegate dự kiến • Iterators, phương thức để lặp bước tính toán trình tự giá trị yield • Kiểu Partial cho phép lớp, cấu trúc, giao diện chia thành nhiều phần lưu trữ tập tin nguồn khác để phát triển bảo trì dễ dàng • Kiểu Nullable đại diện cho giá trị mà chưa biết, chúng hỗ trợ tất giá trị kiểu tiềm ẩn cộng với trạng thái vô giá trị Theo Microsoft, việc tiếp tục nâng cấp ngôn ngữ, với nhấn mạnh đặc biệt hội nhập giao tiếp sở liệu SQL yêu cầu dạng liên kết động Báo cáo phiên 3.0 ngôn ngữ, hoàn thành tháng năm 2006, bao gồm tiến đáng kể việc tích hợp mô hình lập trình chức sở liệu vào dòng hướng đối tượng: • Dạng ngầm định biến địa phương, cho phép kiểu biến địa phương suy từ 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 mở rộng xây dựng kiểu có với phương pháp bổ sung, bên định nghĩa chúng • Biểu thức lambda, tiến hóa phương thức vô danh cung cấp cải thiện khả suy luận kiểu chuyển đổi cho delegate expression trees • Khối khởi tạo đối tượng, dễ dàng xây dựng khởi tạo đối tượng • Kiểu nặc danh, kiểu tự động suy tạo từ khối khởi tạo đối tượng • Dạng ngầm định mảng, dạng sáng tạo khởi tạo mảng, loại phần tử mảng suy từ khởi tạo • Biểu thức truy vấn, cung cấp cú pháp ngôn ngữ tích hợp cho truy vấn tương tự ngôn ngữ truy vấn quan hệ phân cấp, chẳng hạn SQL XQuery Tất tính sử dụng cách tự nhiên sách Để có nhìn đầy đủ chi tiết toàn ngôn ngữ C# 3.0, xem tài liệu tham khảo có sẵn http://msdn2.microsoft.com/vcsharp Về ví dụ Gần 40 chương trình ví dụ đầy đủ sách tạo cách cẩn thận để đáp ứng tiêu chí sau: • Chúng lập trình không 180 dòng, thường 100 • Chúng có liên quan đến hệ thống máy tính thực • Chúng mở rộng nhiều chức Bạn tìm thấy chương trình liên quan đến hệ thống thực tế, chẳng hạn Flickr Facebook, phòng chat, game, blog Chúng giải chủ đề hệ thống nhúng sản xuất Một số ví dụ truyền thống (để làm với ngân hàng chấm điểm sinh viên, ví dụ) đưa vào tốt, hầu hết phần, ví dụ chưa thấy trước sách thuộc loại Một yếu tố quan trọng là, nhờ kết hợp mẫu thiết kế sử dụng khéo léo C# 3.0, chương trình ngắn Ví dụ không đủ ngắn để hiển thị đầy đủ sách trước lý hoàn hảo để đưa ... thường mẫu c phần sử dụng tính ngôn ngữ năm 1980 Không phải sách C# 3.0 Design Patterns nhằm m c đích trình bày 23 mẫu c điển phong c ch C# 3.0 tốt c thể, đảm bảo bạn h c có giá trị th c cho bạn.. .C c mẫu thiết kế đóng gói c ch phổ biến vi c giải vấn đề c ch sử dụng tính ngôn ngữ với Design patterns cung c p ngôn ngữ c p cao cho lập trình viên để mô tả hệ thống họ thảo luận giải pháp cho... thị Khả truy c p tất thu c tính hoạt động (private, public, protected) định M c định cho thu c tính private cho hoạt động public Sai lệch so với giá trị m c định đánh dấu chúng xảy C c loại liên