OOP là gì?
OOP là lập trình hướng đối tượng. Vậy lập trình hướng đối tượng là gì? Ngay từ cái tên của nó "hướng đối tượng" đã có thể giúp ta mường tượng ra được phần nào rồi nhỉ! Hiểu đơn giản là ta sẽ trừu tượng hóa các đối tượng thực tế cuộc sống đưa vào trong code(Thành các Class).ví dụ:
Ta có 3 bé Dũng, Thảo, Phương đều có một điểm chung giống nhau là học sinh. Mà ta cần biết những gì về một học sinh? Ta cần biết tên, ngày sinh, lớp chẳng hạn. Từ đó ta xây dựng một Class học sinh để có thể mô tả về 3 bé này.
Bài tập: Áp dụng vào cuộc sống hằng ngày tìm ra "Class" có thể mô tả chung cho chúng. Ví dụ như xe hơi, xe máy, tàu hỏa, máy bay,... Đều thuộc chung 1 Class phương tiện giao thông. Phần nâng cao hơn là tính "Thừa kế" chúng ta sẽ đề cập ở phía dưới.
À! Quên... Trước khi tiếp tục thì chúng ta phải hiểu được thế nào là Object (Đối tượng) và thế nào là Class (Lớp). Các bạn có thể hiểu đơn giản Class là một bản thiết kế ngôi nhà. Còn Object là những ngôi nhà được xây dựng theo bản thiết kế đó.
Tính chất của OOP là gì?
OOP có 4 tính chất:+ Tính đóng gói ( Encopsulation) : Thể hiện qua các class. Các class "đóng gói" các hàm, thuộc tính thành 1 class.
+ Tính thừa kế ( Inheritance) : Đơn kế thừa và đa kế thừa.
+ Tính đa hình ( Polymorphism) : Thể hiện qua Overriding và Overloading.
+ Tính trừu tượng : Thể hiện qua Abstract và Interface.
Vậy đơn kế thừa và đa kế thừa là gì?
- Ta có thể hiểu đơn kế thừa là 1 con chỉ có duy nhất 1 cha. Còn đa kế thừa là 1 con thể có nhiều cha.Vậy Overriding và Overloading là gì?
- Overriding là khi class có xuất hiện một hàm có cùng tên và tham số truyền vào như class cha.- Overloading là khi trong cùng 1 class xuất hiện nhiều hàm có cùng tên nhưng tham số truyền vào là khác nhau. (Ví dụ class maytinh có 2 hàm sum(int a,int b) và sum(int a,int b,int c) ).
Vậy Abstract và Interface là gì?
- Hiểu đơn giản lúc triển khai Abstract và Interface ta triển khai như một Class nhưng bản chất của Abstract và Interface là khác nhau.- Abstract khi triển khai cho một class thì vẫn được xem là 1 abstract class vì ngoài các hàm abstract ra thì nó còn có thể chứa cả hàm thường và property như một class bình thường.(Hàm abstract là hàm chỉ có phần tên không có phần thân). Các hàm con kế thừa abstract class bắt buộc phải overriding lại những hàm abstract của class cha.
- Interface thì không được xem là một class bởi vì nó không thể chứa các property. Các hàm bên trong một interface được khai báo bình thường nhưng không có phần thân. Các class khác khi implements lại một interface thì bắt buộc phải overriding lại tất cả các hàm của interface đấy.
*Học vui (Có thể bạn đã biết):
- Ngôn ngữ OOP đầu tiên là SmallTalk được phát triển từ SIMULA67 của hãng XEROX.
- Java,C# chỉ hỗ trợ đơn kế thừa.
- C++ hỗ trợ cả đơn và đa kế thừa.
- Java,C# chỉ hỗ trợ đơn kế thừa vì tránh tình trạng lỗi "Diamond problem" do đa kế thừa gây ra. Diamond problem là lỗi phát sinh khi class con gọi một hàm trùng tên ở các class cha của chúng. Ví dụ Class dongVatLa kế thừa Class cho va Class meo. Ở 2 class cha này có một phương thức cùng tên là void tiengKeu(). Khi này dongVatLa "chấm" gọi hàm tiengKeu(). Lúc này chúng ta không biết được nó sẽ lấy tiengKeu() của chó hay mèo.
Like!!! Mong bạn sẽ ra thêm nhiều bài viết nữa. Thank you!!!
Trả lờiXóa