@ 😂😂😂 Không anh ơi. Ý em cái extend từ abstract class là is a thì đúng! Nhưng sao impl từ interface là has-a ạ? Theo như em biết thì has-a phải là thuộc tính của class này là 1 class khác ạ. Còn impl từ 1 interface nó cũng có phần giống như extend từ abstract class vậy, ta tạm xem nó như is-a thì đúng hơn á!
@ "Interface là một kỹ thuật để thu được tính trừu tượng hoàn toàn và đa kế thừa trong các ngôn ngữ mà hướng đối tượng chỉ hỗ trợ đơn kế thừa. Interface cũng biễu diễn mối quan hệ IS-A."
Abstract class giống class bình thường nhưng có thêm các abstract method, có thể dùng luôn hoặc để cho các class khác extend. Tức là một đằng đẻ ra phương thức và thuộc tính để nó dùng và để cho người khác dùng, vì thế nó cũng có thể kế thừa class và implements interface. Interface không có thuộc tính, chỉ chứa các abstract method, không dùng được method đó ngay trong interface đó mà phải dùng thông qua một class khác đã được implements các method của interface đó. Tức là đằng này đẻ ra phương thức chỉ để cho người khác(đã có sẵn thuộc tính) dùng, vì thế nó cũng chỉ có thể kế thừa interface mà không thể kế thừa class.
Bạn nói đúng về cách sử dụng nó, nhưng chưa nói lên được mục đích chính của Abstract class và Interface. Abstract class dùng để TỔNG QUÁT (Generalize) hóa các hành vi của các đối tượng. Interface dùng để CHUẨN HÓA (Standardize) hành vi của các đối tượng. ** Abstract class: giả sử chúng ta có các đối tượng về động vật: Dog, Cat, Chicken, chúng ta nhìn thấy những điểm chung của các đối tượng này: Name, NumberOfLeg, Color..., có hành động Eat(), Run(), MakeSound()... Và chúng ta sẽ tạo ra lớp cơ sở động vật Animal như sau public abstract class Animal{ public string Name {get;set;} public string Color{get;set;} public int NumberOfLeg{get;set;} public abstract void Eat(){} public abstract void Run(){} public abstract void MakeSound(){} } Đối với mỗi loại động vật cụ thể, chúng ta lại có những implementation riêng => cho phép ghi đè phương thức gốc của lớp cơ sở - thêm public void virtual Eat(), Run(), MakeSound(). Như vậy, những lớp con cần phải thực thi lại những hành động này. Đó là lý do mình nói là Abstract class dùng để tổng quát hóa các hành vi. ** Interface dùng để chuẩn hóa các hành vi. Ví dụ, đối với động vật, chúng ta có thể chia thành bọn có thể bơi ISwimable, có thể đi bộ IWalkable, có thể bay IFlyable. Trong mỗi interface này chúng ta định nghĩa ra các phương thức, thuộc tính mang tính chất thiết kế ở mức high level. interface ISwimable { void Swim(); void Dive(); } interace IFlyable{ void Fly(); void TakeOff(); void Land(); } Các interface đang chuẩn hóa cách hành vi của một nhóm đối tượng cụ thể. Ta có thể sử dụng Interface và abstract class như sau - Dog : Animial, ISwimable, IWalkable{} - Duck: Animial, ISwimable, IWalkable, IFlyable{}
Vào một ngày đẹp trời 08/10/2020, em đang mò mẫm nutget package opendnp3 , đang thắc mắc về interface và class. Liền lên youtube tìm thử thì xem được video của anh. Xem xong thấy mình lân lân như phê cần cmnl. Haizz
em học trên lớp xong phần nào còn tối nghĩa coi anh dễ hiểu lắm ạ. nhất là cái đệ quy, trên trường với anh đều ví dụ về giai thừa, nhưng anh giải thích e hiểu ngay
Hay quá anh ạ, e cũng bắt đầu làm việc với OOP mà khá hơi mông lung về abstract class và interface, thích cách nhấn nhá của anh, cảm giác anh có khả năng sư phạm luôn í ^^ Cảm ơn anh nhiều ạ
Em thấy 1 ứng dụng khá hay của interface mà hồi em học java thì em dùng nó khá nhiều. Đó chính là khi 1 hàm yêu cầu param là 1 object và object đó bắt buộc phải có 1 hàm nào đó. Ví dụ như trong java có hàm sort gần giống với sort trong js đi, để có thể gọi hàm sort này trên 1 list các object thì các object này phải implement interface comparable của java.
Video nói khá chi tiết tuy nhiên những tấm chiếu mới như em nghe a nói thì khá khó hiểu vì chưa rõ về Interface và Abstract. Nếu như có hình minh họa hay code minh họa sẽ dễ hiểu hơn rất nhiều.
cái khúc runtime bên interface thì em thấy nó bên abstract class nó cúng làm đc mà anh chẳng khác nhau gì mấy. Thay vì thằng interface thì nó implement còn abstract class thì nó extend cái đó thôi. Mong anh giải thích kỹ giúp em chỗ này để hiểu rõ hơn ạ. Bài giảng rất hay cảm ơn anh nhiều. Nếu mà khác nhau thì chỉ khác cái cấu trúc thực thi thôi ạ
6:40 anh Dev ơi cho em xin hỏi sau java 8 hình như em thấy thằng Interface nó cũng có default methods á anh. thì trường hợp này nó cũng ngang với Abstract Class phải không anh.
E có 2 điều muốn hỏi a: 1. Ở 9:35, E vẫn chưa hiểu về "Interface chỉ chưa instant". A có thể giải thích thêm chổ này và đưa ra một ví dụ được không a. 2. E có biết Interface dùng để truyền dữ liệu qua lại giữa các Class nhưng vẫn chưa thật sự hiểu rõ, nhờ a giải thích thêm dùm e. Cảm ơn a trước ạ
4 ปีที่แล้ว +2
1. Ở đây interface chỉ chứa CONSTANT chứ không phải là instance nha. 2. Nó không có truyền dữ liệu qua lại giữa các class, mà nó định nghĩa là những thứ mà các class đó có. Còn mỗi class nó implement như nào là chuyện của nó nha.
Dạ chào Ông Dev, em có thắc mắc là ở khúc 8:45, em vẫn chưa hiểu ý anh nói là khi nào dùng interface. Anh bảo là "có nhiều thứ trong hệ thống và những thứ đó có chung signature của function, chung kiểu trả về, chung parameter", em đang bị mơ hồ về câu nói này của anh. Phiền anh giúp em hiểu rõ hơn bằng ví dụ nào đó cụ thể được ko ạ. Cảm ơn anh trước ạ
4 ปีที่แล้ว +1
Ví dụ nhá: A muốn sort 1 cái list, nhưng a có nhiều kiểu sort như là QuickSort, MergeSort, HeapSort chẳng hạn. Thì mỗi thằng đó ddeusf có 1 hàm List sort(List input). Thì khi đấy mình có thể đưa cái function sort đó vào trong 1 cái interface gọi là SortAlgo chẳng hạn. Khi đó, trong hàm main của e có thể tạo ra 1 cái biến là SortAlgo, và gọi hàm sort bằng cái interface đó. SortAlgo nó có thể là bất kì type sort nào ở trên, và nó có thể thay đổi ở runtime nữa.
a ơi ! cái khúc runtime bên abstract class e thấy nó cx làm đc mà a
3 ปีที่แล้ว
Uhm, anh nói đoạn này không chính xác nhưng ý a là như này: - Class thì nó sẽ định danh 1 cái shape, nên thường thì class sẽ extend 1 cái abstract class, chứ không làm kiểu tạo 1 cái biến abstract class bằng gì đó. Ví dụ class Rectangle đi, nó sẽ phải là kế thừa Shape đúng ko, chứ mình không có làm kiểu tạo 1 cái prop là Shape trong Rectangle. Còn interface thì nó là behaviour, nên thực ra nó có thể viết theo kiểu 1 cái prop trong class, mà không làm thay đổi cái tính đúng đắn của class đó. Và 1 biến, thì sẽ có get set để update trong runtime. Bên cạnh đó, em nói rất đúng nha, cái abstract class vẫn có thể init nhiều type đc trong run time, nhưng a nghĩ là e hiểu ý của a rồi đúng ko @@
Éc @@ Em cảm ơn nhưng em sợ ko làm nổi anh à, em làm video nó ngáo ngáo quen rồi :v Để em có thêm kinh nghiệm đã, ít năm nữa mà anh còn chiếu cố thì em sẽ theo :D
4:50 anh ơi is-a thôi ạ. Và Has-a là class này có thành phần là class khác ạ!
Thì nói về cả 2 phía mà
@ dạ ý em là ở đây chỉ có mối quan hệ is a thôi, không có has-a gì cả ạ!
@@kieuvo6386 Employee làm sao lại là is a Work đc e?
@ 😂😂😂
Không anh ơi. Ý em cái extend từ abstract class là is a thì đúng!
Nhưng sao impl từ interface là has-a ạ?
Theo như em biết thì has-a phải là thuộc tính của class này là 1 class khác ạ.
Còn impl từ 1 interface nó cũng có phần giống như extend từ abstract class vậy, ta tạm xem nó như is-a thì đúng hơn á!
@ "Interface là một kỹ thuật để thu được tính trừu tượng hoàn toàn và đa kế thừa trong các ngôn ngữ mà hướng đối tượng chỉ hỗ trợ đơn kế thừa. Interface cũng biễu diễn mối quan hệ IS-A."
Abstract class giống class bình thường nhưng có thêm các abstract method, có thể dùng luôn hoặc để cho các class khác extend. Tức là một đằng đẻ ra phương thức và thuộc tính để nó dùng và để cho người khác dùng, vì thế nó cũng có thể kế thừa class và implements interface.
Interface không có thuộc tính, chỉ chứa các abstract method, không dùng được method đó ngay trong interface đó mà phải dùng thông qua một class khác đã được implements các method của interface đó. Tức là đằng này đẻ ra phương thức chỉ để cho người khác(đã có sẵn thuộc tính) dùng, vì thế nó cũng chỉ có thể kế thừa interface mà không thể kế thừa class.
tác dụng của interface ngoài dùng để hỗ trợ đa kế thừa ra thì còn dùng để làm gì nữa không ạ, em có thắc mắc
uây, tóm tắt đỉnh luôn
Bạn nói đúng về cách sử dụng nó, nhưng chưa nói lên được mục đích chính của Abstract class và Interface.
Abstract class dùng để TỔNG QUÁT (Generalize) hóa các hành vi của các đối tượng. Interface dùng để CHUẨN HÓA (Standardize) hành vi của các đối tượng.
** Abstract class: giả sử chúng ta có các đối tượng về động vật: Dog, Cat, Chicken, chúng ta nhìn thấy những điểm chung của các đối tượng này: Name, NumberOfLeg, Color..., có hành động Eat(), Run(), MakeSound()... Và chúng ta sẽ tạo ra lớp cơ sở động vật Animal như sau
public abstract class Animal{
public string Name {get;set;}
public string Color{get;set;}
public int NumberOfLeg{get;set;}
public abstract void Eat(){}
public abstract void Run(){}
public abstract void MakeSound(){}
}
Đối với mỗi loại động vật cụ thể, chúng ta lại có những implementation riêng => cho phép ghi đè phương thức gốc của lớp cơ sở - thêm public void virtual Eat(), Run(), MakeSound(). Như vậy, những lớp con cần phải thực thi lại những hành động này. Đó là lý do mình nói là Abstract class dùng để tổng quát hóa các hành vi.
** Interface dùng để chuẩn hóa các hành vi. Ví dụ, đối với động vật, chúng ta có thể chia thành bọn có thể bơi ISwimable, có thể đi bộ IWalkable, có thể bay IFlyable. Trong mỗi interface này chúng ta định nghĩa ra các phương thức, thuộc tính mang tính chất thiết kế ở mức high level.
interface ISwimable {
void Swim();
void Dive();
}
interace IFlyable{
void Fly();
void TakeOff();
void Land();
}
Các interface đang chuẩn hóa cách hành vi của một nhóm đối tượng cụ thể.
Ta có thể sử dụng Interface và abstract class như sau
- Dog : Animial, ISwimable, IWalkable{}
- Duck: Animial, ISwimable, IWalkable, IFlyable{}
@@tuyenbui9514 Hix, một comment này đã hơn lun video 11 phút r :D. Thanks b.!
@@tuyenbui9514 cho mk hỏi là abstract vs interface thì cái nào đạt đc tính trừu tượng hơn ạ , nếu bn vd luôn thì mk tks nha
Vào một ngày đẹp trời 08/10/2020, em đang mò mẫm nutget package opendnp3 , đang thắc mắc về interface và class. Liền lên youtube tìm thử thì xem được video của anh. Xem xong thấy mình lân lân như phê cần cmnl. Haizz
xem lúc tháng 6. tới tháng 12 xem lại mới hiểu :)) Video cực hay dễ hiểu . Hi vọng lần sau a vừa nói vừa code mẫu thì perfect
Anh vừa nói vừa có ví dụ bằng code thì quá tuyệt
em học trên lớp xong phần nào còn tối nghĩa coi anh dễ hiểu lắm ạ. nhất là cái đệ quy, trên trường với anh đều ví dụ về giai thừa, nhưng anh giải thích e hiểu ngay
Hay quá anh ạ, e cũng bắt đầu làm việc với OOP mà khá hơi mông lung về abstract class và interface, thích cách nhấn nhá của anh, cảm giác anh có khả năng sư phạm luôn í ^^ Cảm ơn anh nhiều ạ
1 class chỉ có kế thừa 1 và chỉ 1 class thôi (extends), nhưng 1 class có thể implenment nhiều interface.
nghe đi nghe lại chục lần là hiểu liền hehe . tks ông dev
Quá tuyệt vời luôn. Kiểu được khai thông đầu óc luôn
ông anh diễn giải hay vãi.. nếu các bạn mới có thể hơi mông lung , nhưng hiểu cơ bản thì thấy gắn gọn xúc tích
Em thấy 1 ứng dụng khá hay của interface mà hồi em học java thì em dùng nó khá nhiều. Đó chính là khi 1 hàm yêu cầu param là 1 object và object đó bắt buộc phải có 1 hàm nào đó. Ví dụ như trong java có hàm sort gần giống với sort trong js đi, để có thể gọi hàm sort này trên 1 list các object thì các object này phải implement interface comparable của java.
bjan học ở đâu java v
@@bestmomentsofgamer2130 học trên internet á bạn😊
Video hay và anh nói chi tiết quá. Em cảm ơn anh nhiều
Phải đi nghiên cứu về nghệ thuật trừu tượng để làm cái hình nền đấy ae ạ :v
Video hay như này mà không làm playlist full về OOP thì quá là phí!
Tuyệt vời quá anh ơi, thả tim cho a
Khi có thằng em nào đó hỏi câu ni thì mình lại gửi cái link này, thật sự khoẻ quá :V
Video nói khá chi tiết tuy nhiên những tấm chiếu mới như em nghe a nói thì khá khó hiểu vì chưa rõ về Interface và Abstract. Nếu như có hình minh họa hay code minh họa sẽ dễ hiểu hơn rất nhiều.
Clip hay quá anh
cái khúc runtime bên interface thì em thấy nó bên abstract class nó cúng làm đc mà anh chẳng khác nhau gì mấy. Thay vì thằng interface thì nó implement còn abstract class thì nó extend cái đó thôi. Mong anh giải thích kỹ giúp em chỗ này để hiểu rõ hơn ạ. Bài giảng rất hay cảm ơn anh nhiều. Nếu mà khác nhau thì chỉ khác cái cấu trúc thực thi thôi ạ
6:40
anh Dev ơi cho em xin hỏi
sau java 8 hình như em thấy thằng Interface nó cũng có default methods á anh.
thì trường hợp này nó cũng ngang với Abstract Class phải không anh.
cám ơn anh ạ
ôi giờ may quá e cảm ơn
Cái này ông này nên đề cập đến ngôn ngữ mà ông nhắc tới :D tôi đoán là java :)
Rất hay
hu wa em xem 3 lần mà lần nào cũng nhận ra mình hiểu thêm 1 tý. Không biết nên vui hay buồn
Mong a ra nhieu video hon ve java
anh làm video nói về OOp lý thuyết được không ạ? Em thấy anh giảng rất dễ hiểu và trực quan hơn nhiều so với đọc tài liệu hay thầy giảng bài a ạ
Mình thấy cái chính đi phỏng vấn là khác biệt chính giữa Abstract và Interface là Interface HỖ TRỢ ĐA KẾ THỪA, còn Abstract thì không.
có thể làm âm thanh nói với âm thanh nhạc giới thiệu bằng nhau k, đang xem, làm cả hàng xóm chửi um xùm
really interesting thanks:3
trời ơi năm nhất vô gặp chú này múa anh
văn mù luôn
Làm về design pattern đi Ông dev ! thank you !!
Mình đã có một số video về Design Pattern hay gặp rồi :D sau nếu có thời gian mình sẽ ra thêm.
E có 2 điều muốn hỏi a:
1. Ở 9:35, E vẫn chưa hiểu về "Interface chỉ chưa instant". A có thể giải thích thêm chổ này và đưa ra một ví dụ được không a.
2. E có biết Interface dùng để truyền dữ liệu qua lại giữa các Class nhưng vẫn chưa thật sự hiểu rõ, nhờ a giải thích thêm dùm e. Cảm ơn a trước ạ
1. Ở đây interface chỉ chứa CONSTANT chứ không phải là instance nha.
2. Nó không có truyền dữ liệu qua lại giữa các class, mà nó định nghĩa là những thứ mà các class đó có. Còn mỗi class nó implement như nào là chuyện của nó nha.
abstract class cũng sử dụng được đa hình mà anh :p
E có nghe nhầm ko nhỉ :v a nhớ là a đâu có nói về đa hình ở đây ta, cái a nói là đa kế thừa mà hè, e cho lại cái phút với
@ 9:10 phút á anh =))
@@childrenf1924 má ơi :v a nói là phát huy, chứ có nói abstract class khum làm đc đâu e :v nó là caid class nó làm gì chả đc :D
@ à tại lúc đó anh so sánh á nên em mới bị confused =)) chứ em biết nó cũng làm được mà
anh đẹp trai quá
Anh chia sẻ cách học tiếng anh của ngành này đi
Okelah :D
Dạ chào Ông Dev, em có thắc mắc là ở khúc 8:45, em vẫn chưa hiểu ý anh nói là khi nào dùng interface. Anh bảo là "có nhiều thứ trong hệ thống và những thứ đó có chung signature của function, chung kiểu trả về, chung parameter", em đang bị mơ hồ về câu nói này của anh. Phiền anh giúp em hiểu rõ hơn bằng ví dụ nào đó cụ thể được ko ạ. Cảm ơn anh trước ạ
Ví dụ nhá: A muốn sort 1 cái list, nhưng a có nhiều kiểu sort như là QuickSort, MergeSort, HeapSort chẳng hạn.
Thì mỗi thằng đó ddeusf có 1 hàm List sort(List input). Thì khi đấy mình có thể đưa cái function sort đó vào trong 1 cái interface gọi là SortAlgo chẳng hạn. Khi đó, trong hàm main của e có thể tạo ra 1 cái biến là SortAlgo, và gọi hàm sort bằng cái interface đó. SortAlgo nó có thể là bất kì type sort nào ở trên, và nó có thể thay đổi ở runtime nữa.
10đ nha anh
a ơi ! cái khúc runtime bên abstract class e thấy nó cx làm đc mà a
Uhm, anh nói đoạn này không chính xác nhưng ý a là như này:
- Class thì nó sẽ định danh 1 cái shape, nên thường thì class sẽ extend 1 cái abstract class, chứ không làm kiểu tạo 1 cái biến abstract class bằng gì đó.
Ví dụ class Rectangle đi, nó sẽ phải là kế thừa Shape đúng ko, chứ mình không có làm kiểu tạo 1 cái prop là Shape trong Rectangle.
Còn interface thì nó là behaviour, nên thực ra nó có thể viết theo kiểu 1 cái prop trong class, mà không làm thay đổi cái tính đúng đắn của class đó. Và 1 biến, thì sẽ có get set để update trong runtime.
Bên cạnh đó, em nói rất đúng nha, cái abstract class vẫn có thể init nhiều type đc trong run time, nhưng a nghĩ là e hiểu ý của a rồi đúng ko @@
@. e hiểu r a ạ! a phản hồi nhanh ghê. E còn sợ đợi lâu
@ anh ơi prop là gì vậy ạ
Qua bên anh dạy không :))
Éc @@ Em cảm ơn nhưng em sợ ko làm nổi anh à, em làm video nó ngáo ngáo quen rồi :v Để em có thêm kinh nghiệm đã, ít năm nữa mà anh còn chiếu cố thì em sẽ theo :D
Hâm mộ anh, anh có thể cho em xin link facebook không ạ.
Tks e đã ủng hộ nha :D Link fanpage ở dưới description ấy e. Còn trang cá nhân thì a ko active lắm :D
Đúng ra nên có code của ngôn ngữ cụ thể để minh họa, chứ nói chay thế này thì chỉ càng gây khó hiểu hơn...
😄
anh nói hay vãi, em chả hiểu gì cả
Tuyệt vời
...