Ngôn Ngữ Lập Trình C# Câu hỏi 6: Khi nào thì phương thức khởi dựng được gọi? Câu hỏi 7: Phương thức khởi dựng tĩnh được gọi khi nào? Câu hỏi 8: Có thể truyền biến chưa khởi tạo vào một hàm được không? Câu hỏi 9: Sự khác nhau giữa một lớp và một đối tượng của lớp? Câu hỏi 10: Thành viên nào trong một lớp có thể được truy cập mà không phải tạo thể hiện của lớp? Câu hỏi 11: Lớp mà chúng ta xây dựng thuộc kiểu dữ liệu nào? Câu hỏi 12: Từ khóa this được dùng làm gì trong một lớp? Bài tập Bài tập 1: Xây dựng một lớp đường tròn lưu giữ bán kính và tâm của đường tròn. Tạo các phương thức để tính chu vi, diện tích của đường tròn. Bài tập 2: Thêm thuộc tính BanKinh vào lớp được tạo ra từ bài tập 1. Bài tập 3: Tạo ra một lớp lưu trữ giá trị nguyên tên myNumber. Tạo thuộc tính cho thành viên này. Khi số được lưu trữ thì nhân cho 100. Và khi số được truy cập thì chia cho 100. Bài tập 4: Chương trình sau có lỗi. Hãy sửa lỗi của chương trình và biên dịch chương trình. Dòng lệnh nào gây ra lỗi? using System; using System.Console; class VD1 { public string first; } class Tester { public static void Main() { VD1 vd = new VD1(); Write(“Nhap vao mot chuoi: ”); vd.first = ReadLine(); Write(“Chuoi nhap vao: {0}”, vd.first); } } Bài tập 5: Chương trình sau có lỗi. Hãy sửa lỗi của chương trình và biên dịch chương trình. Dòng lệnh nào gây ra lỗi? Xây Dựng Lớp - Đối Tượng 123 Giáo trình hướng dẫn phân tích tạo ra những kiểu dữ liệu mới bằng việc tạo ra các lớp đối tượng đa hình . Ngôn Ngữ Lập Trình C# class Class1 { public static void GetNumber(ref int x, ref int y) { x = 5; y = 10; } public static void Main() { int a = 0, b = 0; GetNumber(a, b); System.Console.WriteLine(“a = {0} \nb = {1}”, a, b); } } Câu hỏi 6: Chương trình sau đây có lỗi. Hãy sửa lỗi và cho biết lệnh nào phát sinh lỗi? Class Tester { public static void Main() { Display(); } public static void Display() { System.Console.WriteLine(“Hello!”); return 0; } } Câu hỏi 7: Viết lớp giải phương trình bậc hai. Lớp này có các thuộc tính a, b, c và nghiệm x1, x2. Hãy xây dựng theo hướng đối tượng lớp trên. Lớp cho phép bên ngoài xem được các nghiệm của phương trình và cho phép thiết lập hay xem các giá trị a, b, c. Xây Dựng Lớp - Đối Tượng 124 . . Ngôn Ngữ Lập Trình C# Chương 5 KẾ THỪA – ĐA HÌNH Đặc biệt hóa và tổng quát hóa Sự kế thừa Thực thi kế thừa Gọi phương thức khởi dựng của lớp cơ sở Gọi phương thức của lớp cơ sở Điều khiển truy xuất Đa hình Kiểu đa hình Phương thức đa hình Từ khóa new và override Lớp trừu tượng Gốc của tất cả các lớp - lớp Object Boxing và Unboxing dữ liệu Boxing thực hiện ngầm định Unboxing phải thực hiện tường minh Các lớp lồng nhau Câu hỏi & bài tập Trong chương trước đã trình bày cách tạo ra những kiểu dữ liệu mới bằng việc xây dựng các lớp đối tượng. Tiếp theo chương này sẽ đưa chúng ta đi sâu vào mối quan hệ giữa những đối tượng trong thế giới thực và cách mô hình hóa những quan hệ trong xây dựng chương trình. Chương 5 cũng giới thiệu khái niệm đặc biệt hóa (specialization) được cài đặt trong ngôn ngữ C# thông qua sự kế thừa (inheritance). Kế Thừa – Đa Hình 125 . . Ngôn Ngữ Lập Trình C# Khái niệm đa hình (polymorphism) cũng được trình bày trong chương 5, đây là khái niệm quan trọng trong lập trình hướng đối tượng. Khái niệm này cho phép các thể hiện của lớp có liên hệ với nhau có thể được xử lý theo một cách tổng quát. Cuối cùng là phần trình bày về các lớp cô lập (sealed class) không được đặt biệt hóa, hay các lớp trừu tượng sử dụng trong đặc biệt hóa. Lớp đối tượng Object là gốc của tất cả các lớp cũng được thảo luận ở phần cuối chương. Đặc biệt hóa và tổng quát hóa Lớp và các thể hiện của lớp tức đối tượng tuy không tồn tại trong cùng một khối, nhưng chúng tồn tại trong một mạng lưới sự phụ thuộc và quan hệ lẫn nhau. Ví dụ như con người và xã hội động vật cùng sống trong một thế giới có quan hệ loài với nhau. Quan hệ là một (is-a) là một sự đặc biệt hóa. Khi chúng ta nói rằng mèo là một loại động vật có vú, có nghĩa là chúng ta đã nói rằng mèo là một trường hợp đặc biệt của loại động vật có vú. Nó có tất cả các đặc tính của bất cứ động vật có vú nào (như sinh ra con, có sữa mẹ và có lông ). Tuy nhiên, mèo có thêm các đặc tính riêng được xác định trong họ nhà mèo mà các họ động vật có vú khác không có được. Chó cũng là loại động vật có vú, chó cũng có tất cả các thuộc tính của động vật có vú, và riêng nó còn có thêm các thuộc tính riêng xác định họ loài chó mà khác với các thuộc tính đặc biệt của loài khác ví dụ như mèo chẳng hạn. Quan hệ đặc biệt hóa và tổng quát hóa là hai mối quan hệ đối ngẫu và phân cấp với nhau. Chúng có quan hệ đối ngẫu vì đặc biệt được xem như là mặt ngược lại của tổng quát. Do đó, loài chó và mèo là trường hợp đặc biệt của động vật có vú. Ngược lại động vật có vú là trường hợp tổng quát từ các loài chó và mèo. Mối quan hệ là phân cấp bởi vì chúng ta tạo ra một cây quan hệ, trong đó các trường hợp đặc biệt là những nhánh của trường hợp tổng quát. Trong cây phân cấp này nếu di chuyển lên trên cùng ta sẽ được trường hợp tổng quát hóa, và ngược lại nếu di chuyển xuống ngược nhánh thì ta được trường hợp đặc biệt hóa. Ta có sơ đồ phân cấp minh họa cho loài chó, mèo và động vật có vú như trên: Kế Thừa – Đa Hình 126 ĐỘNG VẬT CÓ VÚ MÈO CHÓ . . Ngôn Ngữ Lập Trình C# Tương tự, khi chúng ta nói rằng ListBox và Button là những Window, ta phải chỉ ra những đặc tính và hành vi của những Window có trong cả hai lớp trên. Hay nói cách khác, Window là tổng quát hóa chia xẻ những thuộc tính của hai lớp ListBox và Button, trong khi đó mỗi trường hợp đặc biệt ListBox và Button sẽ có riêng những thuộc tính và hành vi đặc thù khác. Ngôn ngữ mô hình hóa thống nhất (UML) UML ( Unified Modeling Language) là ngôn ngữ chuẩn hóa để mô tả cho một hệ thống hoặc thương mại. Trong chương này sử dụng một số phần của mô hình UML để trình bày các biểu đồ quan hệ giữa các lớp. Trong UML, những lớp được thể hiện như các khối hộp, tên của lớp được đặt trên cùng của khối hộp, và các phương thức hay các biến thành viên được đặt bên trong hộp. Như trong hình 5.1, mô hình quan hệ tổng quát hóa và đặc biệt hóa được trình bày qua UML, ghi chú rằng mũi tên đi từ các lớp đặc biệt hóa đến lớp tổng quát hóa. Hình 5.2: Quan hệ giữa thành phần cửa sổ Thông thường lưu ý rằng khi hai lớp chia xẻ chức năng với nhau, thì chúng được trích ra các phần chung và đưa vào lớp cơ sở chia xẻ. Điều này hết sức có lợi, vì nó cung cấp khả năng cao để sử dụng lại các mã nguồn chung và dễ dàng duy trì mã nguồn. Kế Thừa – Đa Hình 127 Window Button List Box Window . . . Chương trình sau có lỗi. Hãy sửa lỗi của chương trình và biên dịch chương trình. Dòng lệnh nào gây ra lỗi? Xây Dựng Lớp - Đối Tượng 123 Giáo trình hướng dẫn phân tích tạo ra những kiểu dữ liệu mới. của lớp cơ sở Gọi phương thức của lớp cơ sở Điều khiển truy xuất Đa hình Kiểu đa hình Phương thức đa hình Từ khóa new và override Lớp trừu tượng Gốc của tất cả các lớp - lớp Object . Unboxing dữ liệu Boxing thực hiện ngầm định Unboxing phải thực hiện tường minh Các lớp lồng nhau Câu hỏi & bài tập Trong chương trước đã trình bày cách tạo ra những kiểu dữ liệu mới bằng