Giờ làm việc

T2 - T7 8h30 - 18h00

Liên hệ

 

Thực hành lập trình hướng đối tượng OOP trong Kotlin

Trong lập trình hướng đối tượng (OOP), có bốn tính chất chính mà Kotlin hỗ trợ.

  1. 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.
  2. 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.
  3. 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).
  4. 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.

  1. Chúng ta tạo lớp Triangle có các thuộc tính side1, side2, side3 để biểu diễn các cạnh của tam giác.
  2. Lớp Triangle có hai phương thức calculatePerimeter để tính chu vi và calculateArea (trừu tượng) để tính diện tích. Phương thức calculateArea được định nghĩa mặc định trả về 0.0.
  3. Lớp RightTriangleIsoscelesTriangle kế thừa từ lớp Triangle và ghi đè phương thức calculateArea để tính diện tích dựa trên loại tam giác tương ứng.
  4. 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

Comments are closed.

Gọi ngay