Abstract class và interface ???
Hế lô hế lô, Ông dev đây!
Trong video này mình sẽ giới thiệu abstract class và interface đồng thời đưa ra một số so sánh giữa 2 chủ thể này trong lập trình.
-- Để xem những video về lập trình và gaming --
Nhấn vào đây để theo dõi kênh mình nhé: tinyurl.com/SubscribeOngDev
-- Blog của mình --
blog.ongdev.com
-- Ủng hộ Ông Dev --
-- Facebook page của mình --
/ ongdevvuitinh
Cảm ơn các bạn đã quan tâm theo dõi
#ôngdev #OOP #abstractclassvàinterface
Пікірлер: 75
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à
@kieuvo6386
Жыл бұрын
@ 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?
@kieuvo6386
Жыл бұрын
@ 😂😂😂 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 á!
@kieuvo6386
Жыл бұрын
@ "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.
@ChiPham-hr3xl
Жыл бұрын
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
@hungkm201
Жыл бұрын
uây, tóm tắt đỉnh luôn
@tuyenbui9514
5 ай бұрын
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{}
@evileyes9317
2 ай бұрын
@@tuyenbui9514 Hix, một comment này đã hơn lun video 11 phút r :D. Thanks b.!
@vietdao336
27 күн бұрын
@@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
Video hay và anh nói chi tiết quá. Em cảm ơn anh nhiều
nghe đi nghe lại chục lần là hiểu liền hehe . tks ông dev
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
Quá tuyệt vời luôn. Kiểu được khai thông đầu óc luôn
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 ạ
Tuyệt vời quá anh ơi, thả tim cho a
ô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
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.
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 ạ
Video hay như này mà không làm playlist full về OOP thì quá là phí!
Clip hay quá anh
ôi giờ may quá e cảm ơn
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.
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
Rất hay
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
cám ơn anh ạ
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
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.
@bestmomentsofgamer2130
Жыл бұрын
bjan học ở đâu java v
really interesting thanks:3
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 ạ
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á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 :)
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 !!
4 жыл бұрын
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.
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
anh đẹp trai quá
10đ nha 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 жыл бұрын
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.
Anh chia sẻ cách học tiếng anh của ngành này đi
4 жыл бұрын
Okelah :D
anh có thể nêu ra 1 ví dụ về abtracts và interface em có thể hình dung rõ hơn được k ạ. tại em khá mơ hồ khi nghe lý thuyết mặc dù nghe rất nhiều lần ạ.Và có trường hợp nào mà có thể dùng được cả abtracts và interface luôn không ạ a.
3 жыл бұрын
Ví dụ em là Student, thì em kế thừa abstract class Person, sẽ bao gồm các tính chất cơ bản của con người, những tính năng của con người. Nhưng em chơi game thì em sẽ có thêm cái interface GamePlayable thì em sẽ có viết những function của cái interface đó, ví dụ như em chơi game gì, chơi game như thế nào. Abstract thì hầu hết là định nghĩa cấu trúc, interface định nghĩa tính năng
@atphamvan5338
3 жыл бұрын
@ dạ a ơi tức là ở abtracts là có phương thức và thuộc tính đúng k a
Qua bên anh dạy không :))
4 жыл бұрын
É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
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 жыл бұрын
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.
Hâm mộ anh, anh có thể cho em xin link facebook không ạ.
4 жыл бұрын
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
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
@childrenf1924
Жыл бұрын
@ 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
@childrenf1924
Жыл бұрын
@ à 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à
Đú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... 😄
a ơi ! cái khúc runtime bên abstract class e thấy nó cx làm đc mà a
2 жыл бұрын
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 @@
@loco7385
2 жыл бұрын
@. e hiểu r a ạ! a phản hồi nhanh ghê. E còn sợ đợi lâu
@ruanhuibai-r2c
Жыл бұрын
@ anh ơi prop là gì vậy ạ
anh nói hay vãi, em chả hiểu gì cả
Жыл бұрын
Tuyệt vời
...