Trong lập trình hướng đối tượng (OOP), có bốn tính chất chính mà Kotlin hỗ trợ.
- Tính đóng gói (Encapsulation): Tính chất này cho phép ẩn thông tin của một lớp và chỉ tiết lộ những thông tin cần thiết. Trong Kotlin, bạn có thể sử dụng từ khoá
private
để ẩn các thuộc tính và phương thức của lớp. - Tính kế thừa (Inheritance): Tính chất này cho phép một lớp con kế thừa các thuộc tính và phương thức của một lớp cha. Kotlin hỗ trợ kế thừa thông qua từ khoá
:
, và nó cũng hỗ trợ kế thừa đa hình. - Tính đa hình (Polymorphism): Tính chất này cho phép các đối tượng của các lớp khác nhau có thể được xử lý theo cùng một cách. Kotlin hỗ trợ đa hình thông qua các phương thức ghi đè (override) và ghi đè toàn bộ (override the whole function).
- Tính trừu tượng (Abstraction): Tính chất này cho phép bạn định nghĩa các lớp trừu tượng, là các lớp chỉ chứa khung (skeleton) của phương thức mà các lớp con cần cài đặt. Kotlin cho phép bạn sử dụng từ khoá
abstract
để định nghĩa các lớp trừu tượng và phương thức trừu tượng.
Dưới đây là một ví dụ minh họa về cách sử dụng 4 tính chất lập trình hướng đối tượng (OOP) trong Kotlin để tạo class Tam giác, Tam giác vuông, Tam giác cân và tính chu vi, diện tích của tam giác.
// Tính chất 1: Đóng gói (Encapsulation)
open class Triangle(val side1: Double, val side2: Double, val side3: Double) {
// Tính chu vi
open fun calculatePerimeter(): Double {
return side1 + side2 + side3
}
// Tính diện tích (trừu tượng, sẽ được ghi đè trong các lớp con)
open fun calculateArea(): Double {
return 0.0
}
}
// Tính chất 2: Kế thừa (Inheritance)
class RightTriangle(side1: Double, side2: Double, side3: Double) : Triangle(side1, side2, side3) {
// Ghi đè tính diện tích cho tam giác vuông
override fun calculateArea(): Double {
return (side1 * side2) / 2
}
}
// Tính chất 3: Đa hình (Polymorphism)
class IsoscelesTriangle(base: Double, equalSide: Double) : Triangle(base, equalSide, equalSide) {
// Ghi đè tính diện tích cho tam giác cân
override fun calculateArea(): Double {
val height = Math.sqrt(equalSide * equalSide - (base / 2) * (base / 2))
return (base * height) / 2
}
}
fun main() {
// Tính chất 4: Trừu tượng (Abstraction)
val regularTriangle = Triangle(5.0, 6.0, 7.0)
val rightTriangle = RightTriangle(3.0, 4.0, 5.0)
val isoscelesTriangle = IsoscelesTriangle(4.0, 3.0)
println("Perimeter of a regular triangle: ${regularTriangle.calculatePerimeter()}")
println("Area of a regular triangle: ${regularTriangle.calculateArea()}")
println("Perimeter of a right triangle: ${rightTriangle.calculatePerimeter()}")
println("Area of a right triangle: ${rightTriangle.calculateArea()}")
println("Perimeter of an isosceles triangle: ${isoscelesTriangle.calculatePerimeter()}")
println("Area of an isosceles triangle: ${isoscelesTriangle.calculateArea()}")
}
Giải thích.
- Chúng ta tạo lớp
Triangle
có các thuộc tínhside1
,side2
,side3
để biểu diễn các cạnh của tam giác. - Lớp
Triangle
có hai phương thứccalculatePerimeter
để tính chu vi vàcalculateArea
(trừu tượng) để tính diện tích. Phương thứccalculateArea
được định nghĩa mặc định trả về 0.0. - Lớp
RightTriangle
vàIsoscelesTriangle
kế thừa từ lớpTriangle
và ghi đè phương thứccalculateArea
để tính diện tích dựa trên loại tam giác tương ứng. - Trong
main()
, chúng ta tạo các đối tượng tam giác và gọi các phương thức để tính chu vi và diện tích của mỗi tam giác.
Video hướng dẫn.
Code mẫu trong bài giảng: https://github.com/DuyLeHong/OOPKotlin
Liên hệ
Để được tư vấn lộ trình học chuẩn để học lấy nền tảng lập trình cơ bản / chuyển ngành / lên mức Lập trình viên chuyên nghiệp, đừng ngại inbox page fb.com/CodeFresherVN để Admin tư vấn lộ trình học với thời gian và chi phí phù hợp nhất cho bạn nhé!
Địa chỉ: Trung tâm CodeFresher – Tầng 5 tòa nhà Diamond Flower – số 1 Hoàng Đạo Thúy, Thanh Xuân, Hà Nội – SĐT: 081.318.8668