Tại sao chúng tôi sử dụng Giao diện?
Nó chỉ dành cho Tiêu chuẩn hóa?
Tại sao chúng tôi sử dụng Giao diện?
Nó chỉ dành cho Tiêu chuẩn hóa?
Câu trả lời:
Tương tự 1 : Giống như tàu con thoi của Mỹ, tàu vũ trụ Soyuz của Nga và tàu vũ trụ Thần Châu 5 của Trung Quốc đều có thể cập bến Trạm vũ trụ quốc tế, vì chúng có cùng một giao diện lắp ghép. (Đây chỉ là một ví dụ - tôi không biết nó có đúng trong đời thực hay không, tuy nhiên, hãy tạm ngưng sự hoài nghi của chúng ta để làm ví dụ)
Tương tự 2 : Giống như bạn có thể cắm nhiều màn hình máy tính khác nhau vào máy tính ở nhà. Bạn có thể cắm một chiếc TV cỡ treo tường vào đó, một chiếc CRT cũ (loại dày), một màn hình phẳng 20 inch hoặc một máy chữ nổi để người mù có thể "nhìn" bằng cách chạm. Có khả năng tương thích giữa các thiết bị khác nhau / khác nhau này và máy tính vì tất cả đều thống nhất về tiêu chuẩn giao diện.
Chi tiết về giao diện C # - Với giao diện C # / OOP, bạn đang làm điều tương tự nhưng trong thế giới ảo / vô hình.
Bạn đúng về tiêu chuẩn , mà còn linh hoạt , khả năng mở rộng , khả năng mở rộng , bảo trì , tái sử dụng , testability và sức mạnh .
(Bạn càng sử dụng nhiều giao diện phần mềm thì những "từ buzz" này sẽ được hiểu nhiều hơn. Và hãy luôn xem xét các giao diện trong thế giới thực vì chúng đã làm chúng ta tốt như nhau.)
standardization, but also flexibility, scalability, extensibility, maintainability, reusability, testability and power.
Một giao diện được sử dụng để mô tả những gì một thứ được triển khai có thể làm. Vì vậy, bạn có thể xử lý một số đối tượng triển khai cùng một giao diện như một loại giao diện này.
Ví dụ:
public interface IMyInterface{
public void DoFirst();
public int DoSecond();
}
public class A : IMyInterface{
//class has to implement DoFirst and DoSecond
public void DoFirst(){
Console.WriteLine("Blubb1");
}
public int DoSecond(){
Console.WriteLine("Blubb2");
return 2;
}
}
public class B : IMyInterface{
//class has to implement DoFirst and DoSecond
public void DoFirst(){
Console.WriteLine("Blibb1");
}
public int DoSecond(){
Console.WriteLine("Blibb2");
return 4;
}
}
Các lớp triển khai Giao diện theo một số cách. Nhưng bạn có thể sử dụng chúng như IMyInterface. Ví dụ:
public static void DoMethodsInInterface(IMyInterface inter){
inter.DoFirst();
inter.DoSecond();
}
public static void main(){
DoMethodsInInterface(new A());
DoMethodsInInterface(new B());
//Or use it in a List
List<IMyInterface> interlist = new List<IMyInterface>();
interlist.Add(new A());
interlist.Add(new B());
foreach(IMyInterface inter in interlist){
inter.DoFirst();
}
}
Tôi hy vọng điều này làm rõ một chút tại sao giao diện lại hữu ích.
Woozle
, thì bất kỳ mã nào muốn chấp nhận một tham chiếu đến một trong hai lớp và Woozle
nó sẽ phải biết nó đang xử lý lớp nào và chỉ có thể với Woozle
các lớp mà nó biết. Ngược lại, nếu cả hai lớp đều triển khai IWoozler
, thì mã được cung cấp bất kỳ IWoozler
có thể có Woozle
mà không cần biết chính xác kiểu của nó.
Đây là chế độ xem cấp cao ...
Các giao diện đóng một vai trò lớn trong khái niệm Ẩn thông tin .
Về cơ bản, chúng giúp bạn ẩn chi tiết triển khai của lớp để một lớp gọi không phụ thuộc vào việc triển khai đó. Do đó, bằng cách sử dụng các giao diện, bạn có thể sửa đổi việc triển khai mà không cần thay đổi lớp gọi. Tất cả điều này lần lượt hạn chế sự phức tạp của mã của bạn và giúp dễ bảo trì hơn về lâu dài.
Khi tôi lần đầu tiên bắt đầu hiểu về các giao diện, chúng được giải thích với tôi như một "hợp đồng cung cấp mô tả về lớp của bạn." Không chắc liệu điều đó có giúp ích cho bạn không nhưng nếu bạn nghĩ về một giao diện cho một chiếc ô tô, bạn có thể nói rằng nó sẽ lái , ngắt và quay . Vì vậy, miễn là nó đưa tôi từ điểm A đến điểm B, tôi không thực sự phải biết những chức năng đó được triển khai như thế nào.
Lý do chính mà các giao diện được sử dụng trong các ngôn ngữ như C # / Java là vì những ngôn ngữ đó không hỗ trợ nhiều (lớp) kế thừa (xem vấn đề chính xác với đa kế thừa là gì? ).
Nhưng việc triển khai nhiều (giao diện) được phép cho phép sử dụng các lớp theo những cách khác nhau.
Các giao diện hơi khó xử. Họ hỗ trợ thiết kế theo hợp đồng chỉ bằng cách tin rằng, cùng một tên và giao diện được triển khai có nghĩa là cùng một hành vi. Điều này chỉ hoạt động nhờ vào tài liệu API, nó phải được con người kiểm tra. Điều đó làm cho các giao diện quá yếu. Một cách để giải quyết vấn đề đó có thể là thông số kỹ thuật chính thức. Mặt khác, các giao diện quá mạnh, quá nghiêm ngặt. Bạn không thể phát triển các giao diện thường bị cản trở khi sử dụng lại. Điều này được giải quyết bởi các giao thức - cơ chế trong ngôn ngữ động, gửi tin nhắn (phương thức gọi) và khi tin nhắn đó không được hỗ trợ bởi bộ thu, cuộc gọi lại tiêu chuẩn sẽ được gọi. Có các giao thức cụ thể với các ràng buộc sẽ tốt hơn.
Nghĩ rằng hối hận ...
Có một khách hàng và một máy chủ liên quan ở đây. Hãy nói rằng họ được tách biệt về mặt vật lý bởi internet. Máy khách đang gọi một phương thức mà việc thực thi thực sự xảy ra trên máy chủ. Từ quan điểm của khách hàng, khách hàng không biết bất cứ điều gì về đối tượng trong máy chủ thực hiện việc thực thi. Tuy nhiên nó biết phương pháp nào để gọi. Bởi vì trong khi xây dựng chương trình khách hàng, chúng ta chỉ tiếp xúc với một giao diện (hoặc hợp đồng). Chúng tôi không được tiếp xúc với toàn bộ đối tượng đang thực sự sống trên máy chủ. Hãy thử thực hiện một số ứng dụng demo trong .net Remoting, và bạn sẽ hiểu phần còn lại. Chúc bạn lập trình vui vẻ.
Tại sao chúng tôi sử dụng giao diện?
Một số ngôn ngữ thực hiện các cuộc gọi phương pháp đa hình sử dụng vtables và loại bỏ hầu hết các loại thông tin làm cho nó khó không để xác định các giao diện.
Vì vậy, đôi khi chúng tôi chỉ sử dụng giao diện vì thiết kế ngôn ngữ yêu cầu nó.
Giao diện cung cấp phương thức nguyên mẫu chỉ chứa tuyên bố về chức năng của một hành vi cụ thể.
và nếu bạn muốn triển khai hành vi này vào lớp thì bạn phải triển khai giao diện này trong lớp sau đó lớp có chức năng hành vi này hoặc nó có thể có nhiều hành vi.
bởi vì lớp có thể triển khai nhiều giao diện.
Nếu ai khác giống tôi và học bằng ví dụ và làm, thay vì chỉ giải thích, đây là một số mã ...
Tôi đã tìm thấy cách triển khai Mạng Neural này trong C #, bao gồm cả tải xuống dự án, giúp sử dụng Giao diện một cách thanh lịch và hữu ích: