Giáo trình phân tích quy trình ứng dụng kỹ thuật nghiên cứu tạo ra những kiểu dữ liệu mới đa hình p4

Giáo trình phân tích quy trình ứng dụng kỹ thuật nghiên cứu tạo ra những kiểu dữ liệu mới đa hình p4

Lượt xem: 112,838Lượt tải: 5Số trang: 5

Mô tả tài liệu

Tham khảo tài liệu 'giáo trình phân tích quy trình ứng dụng kỹ thuật nghiên cứu tạo ra những kiểu dữ liệu mới đa hình p4', tài chính - ngân hàng, kế toán - kiểm toán phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Tóm tắt nội dung

Ngôn Ngữ Lập Trình thêm vào vẫn bình thường cho đến khi công ty A, tác giả của lớp cơ sở Window, đưa ra phiên bản thứ hai của lớp Window. Và trong phiên bản mới này những người lập trình của công ty A đã thêm một phương thức Sort( ) vào lớp cơ sở class virtual void Sort( ) các ngôn ngữ lập trình hướng đối tượng khác như C++, phương thức ảo mới lớp Window bây giờ sẽ hành động giống như là một phương thức cơ sở cho ảo trong lớp ListBox. Trình biên dịch có thể gọi phương thức Sort( ) trong lớp chúng ta có ý định gọi phương thức Sort( ) trong Window. Trong ngôn ngữ Java, thức Sort( ) trong Window có kiểu trả về khác kiểu trả về của phương thức Sort( ) trong lớp ListBox thì sẽ được báo lỗi là phương thức phủ quyết không hợp lệ. Ngôn ngữ C# ngăn ngừa sự lẫn lộn này, trong C# một phương thức ảo thì được xem như là gốc rễ của sự phân phối ảo. Do vậy, một khi C# tìm thấy một phương thức khai báo là ảo thì nó sẽ không thực hiện bất cứ việc tìm kiếm nào trên cây phân cấp kế thừa. Nếu một ảo Sort( ) được trình bày trong lớp Window, thì khi thực hiện hành vi của lớp thay đổi. Tuy nhiên khi biên dịch lại, thì trình biên dịch sẽ đưa ra một cảnh báo giống như 24): warning CS0114: )’ member make the current member override that the override keyword. Otherwise add the new loại bỏ cảnh báo này, người lập trình phải chỉ rõ ý định của anh ta. Anh ta có thể đánh thức ) với từ khóa là new, và nó không phải phủ quyết của bất cứ phương thức ảo nào trong lớp class ListBox : new virtual Sort( ) thực hiện khai báo trên sẽ loại bỏ được cảnh báo. Mặc khác nếu người lập trình muốn phủ quyết một phương thức trong Window, thì anh ta cần thiết phải dùng từ khóa khai báo một cách tường class ListBox : override void Sort( ) {…} Kế Thừa – Đa Ngữ Lập Trình C# } Lớp trừu tượng Mỗi lớp con của lớp Window nên thực thi một phương thức cho Tuy nhiên điều này không thực sự đòi hỏi phải thực hiện một cách bắt buộc. Để yêu cầu các lớp con (lớp dẫn xuất) phải thực thi một phương thức của lớp cơ sở, chúng ta kế một phương thức một cách trừu phương thức trừu tượng không có sự thực thi. Phương thức này chỉ đơn giản tạo ra một tên phương thức và ký hiệu của phương thức, phương thức này sẽ được thực thi ở các lớp dẫn lớp trừu tượng được thiết lập như là cơ sở cho những lớp dẫn xuất, nhưng việc tạo các thể hiện hay các đối tượng cho các lớp trừu tượng được xem là không hợp lệ. Một khi chúng ta khai báo một phương thức là trừu tượng, thì chúng ta phải ngăn cấm bất cứ việc tạo thể hiện cho lớp này. Do vậy, nếu chúng ta thiết kế phương thức như là trừu tượng trong chúng ta có thể dẫn xuất từ lớp này, nhưng ta không thể tạo bất cứ đối tượng cho lớp này. Khi đó mỗi lớp dẫn xuất phải thực thi phương thức Nếu lớp dẫn thực thi phương thức trừu tượng của lớp cơ sở thì lớp dẫn xuất đó cũng là lớp và ta cũng không thể tạo các thể hiện của lớp này thức trừu tượng được thiết lập bằng cách thêm từ khóa abstract vào đầu của phần định nghĩa phương thức, cú pháp thực hiện như public void ); Do phương thức không cần phần thực thi, nên không có dấu ({}) mà chỉ có dấu chấm phẩy (;) sau phương thức. Như thế với phương thức được thiết kế là trừu tượng thì chỉ cần câu lệnh trên là đủ. Nếu một hay nhiều phương thức được khai báo là trừu tượng, thì phần định nghĩa lớp phải được khai báo là abstract, với lớp Window ta có thể khai báo là lớp trừu tượng như public void dụ 5.3 sau minh họa việc tạo lớp Window trừu tượng và phương thức trừu của lớp Window.  Ví dụ 5.3: Sử dụng phương thức và lớp trừu public class hàm khởi dựng lấy hai tham Window( int top, int Thừa – Đa Ngữ Lập Trình = = phương thức trừu tượng minh họa việc // vẽ ra cửa public void biến thành viên int int lớp ListBox dẫn xuất từ lớp class ListBox : hàm khởi dựng lấy ba tham ListBox( int top, int left, string contents) : base( top, = phủ quyết phương thức trừu tượng override void string to the listbox: {0}”, biến private của string lớp Button dẫn xuất từ lớp class Button : hàm khởi tạo nhận hai tham Button( int top, int left) : base( top, thực thi phương thức trừu override void button at {0}, {1}\n”, top, Thừa – Đa Ngữ Lập Trình class void winArray = new = new ListBox( 1, 2, “First List = new ListBox( 3, 4, “Second List = new Button( 5, 6); for( int i=0; i <3 ; ví dụ 5.3, lớp Window được khai báo là lớp trừu tượng và do vậy nên chúng ta không thể tạo bất cứ thể hiện nào của lớp Window. Nếu chúng ta thay thế thành viên đầu tiên = new ListBox( 1, 2, “First List câu lệnh = new Window( 1, 2); Thì trình biên dịch sẽ báo một lỗi như create an instance of the abstract class or interface ta có thể tạo được các thể hiện của lớp ListBox và Button, bởi vì hai lớp này đã phủ quyết phương thức trừu tượng. Hay có thể nói hai lớp này đã được xác định (ngược với lớp trừu Hạn chế của lớp trừu tượng Mặc dù chúng ta đã thiết kế phương thức như một lớp trừu tượng để hỗ trợ cho tất cả các lớp dẫn xuất được thực thi riêng, nhưng điều này có một số hạn chế. Nếu chúng ta dẫn xuất một lớp từ lớp ListBox như lớp thì lớp này không được hỗ trợ để thực thi phương thức ) cho riêng nó. Ghi chú: Khác với ngôn ngữ C++, trong C# phương thức ) không thể cung cấp một sự thực thi, do đó chúng ta sẽ không thể lấy được lợi ích của phương bình thường dùng để chia xẻ bởi các lớp dẫn cùng những lớp trừu tượng không có sự thực thi căn bản; chúng thể hiện ý tưởng về một sự trừu tượng, điều này thiết lập một sự giao ước cho tất cả các lớp dẫn xuất. Nói cách khác Kế Thừa – Đa Ngữ Lập Trình C# các lớp trừu tượng mô tả một phương thức chung của tất cả các lớp được thực thi một cách trừu tượng. Ý tưởng của lớp trừu tượng Window thể hiện những thuộc tính chung cùng với những hành vi của tất cả các Window, thậm chí ngay cả khi ta không có ý định tạo thể hiện của chính lớp trừu tượng Window. Ý nghĩa của một lớp trừu tượng được bao hàm trong chính từ “trừu tượng”. Lớp này dùng để thực thi một “Window” trừu tượng, và nó sẽ được biểu lộ trong các thể hiện xác định như là Button, ListBox, lớp trừu tượng không thể thực thi được, chỉ có những lớp xác thực tức là những lớp dẫn xuất từ lớp trừu tượng này mới có thể thực thi hay tạo thể hiện. Một sự thay đổi việc sử dụng trừu tượng là định nghĩa một giao diện phần này sẽ được trình bày trong Chương 8 nói về giao diện.  Lớp cô lập (sealed với các lớp trừu tượng là các lớp cô lập. Một lớp trừu tượng được thiết kế cho các lớp dẫn xuất và cung cấp các khuôn mẫu cho các lớp con theo sau. Trong khi một lớp cô lập thì không cho phép các lớp dẫn xuất từ nó. Để khai báo một lớp cô lập ta dùng từ đặt trước khai báo của lớp không cho phép dẫn xuất. Hầu hết các lớp thường được đánh dấu sealed nhằm ngăn chặn các tai nạn do sự kế thừa gây ra. Nếu khai báo của lớp Window trong ví dụ 5.3 được thay đổi từ khóa abstract bằng từ (cũng có thể loại bỏ từ khóa trong khai báo của phương thức sẽ bị lỗi khi biên dịch. Nếu chúng ta cố thử biên dịch chương trình thì sẽ nhận được lỗi từ trình biên cannot inherit from sealed class chỉ là một lỗi trong số những lỗi như ta không thể tạo một phương thức thành trong một lớp khai báo là sealed. Gốc của tất cả các lớp: Lớp cả các lớp của ngôn ngữ C# của bất cứ kiểu dữ liệu nào thì cũng được dẫn xuất từ Thú vị là bao gồm cả các kiểu dữ liệu giá trị. Một lớp cơ sở là cha trực tiếp của một lớp dẫn xuất. Lớp dẫn xuất này cũng có thể làm cơ sở cho các lớp dẫn xuất xa hơn nữa, việc dẫn xuất này sẽ tạo ra một cây thừa kế hay một kiến trúc phân cấp. Lớp gốc là lớp nằm ở trên cùng cây phân cấp thừa kế, còn các lớp dẫn xuất thì nằm bên dưới. Trong ngôn ngữ C#, lớp gốc là lớp Object, lớp này nằm trên cùng trong cây phân cấp các lớp. Lớp Object cung cấp một số các phương thức dùng cho các lớp dẫn xuất có thể thực hiện việc phủ quyết. Những phương thức này bao gồm Equals() kiểm tra xem hai đối tượng có hay không. Phương thức GetType() trả về kiểu của đối tượng. Và phương thức Thừa – Đa Box .