Nắm bắt cơ bản Lập Trình Hướng Đối Tượng OOP

Tính kế thừa

Nó cho phép xây dựng một lớp mới dựa trên các định nghĩa của lớp đã có. Có nghĩa là lớp cha có thể chia sẽ dữ liệu và phương thức cho các lớp con. Các lớp con khỏi phải định nghĩa lại, ngoài ra có thể mở rộng các thành phần kế thừa và bổ sung thêm các thành phần mới. Tái sử dụng mã nguồn 1 cách tối ưu, tận dụng được mã nguồn. Một số loại kế loại kế thừa thường gặp: đơn kế thừa, đa kế thừa, kế thừa đa cấp, kế thừa thứ bậc.

Khi bắt đầu xây dựng ứng dụng chúng ta sẽ bắt đầu thiết kế định nghĩa các lớp trước. Thông thường một số lớp có quan hệ với những lớp khác, chúng có những đặc tính giống nhau.

VD: 2 lớp Android, iPhone

Mỗi lớp đều đại diện cho một loại smartphone khác nhau nhưng lại có những thuộc tính giống nhau như gọi điện, nhắn tin, chụp hình. Thay vì sao chép những thuộc tính này, ta nên đặt chúng vào một lớp chung gọi là lớp cha. Chúng ta có thể định nghĩa lớp cha – trong trường hợp này là Smartphone và có những lớp con kế thừa từ nó, tạo ra một mối quan hệ cha/con.

Tính đa hình

Tính đa hình là một hành động có thể được thực hiện bằng nhiều cách khác nhau. Đây lại là một tính chất có thể nói là chứa đựng hầu hết sức mạnh của lập trình hướng đối tượng.

Hiểu một cách đơn giản hơn: Đa hình là khái niệm mà hai hoặc nhiều lớp có những phương thức giống nhau nhưng có thể thực thi theo những cách thức khác nhau.

Ví dụ như ở phần trên, mỗi một smartphone kế thừa từ lớp cha Smartphone nhưng có thể lưu trữ dữ liệu trên cloud theo những cách khác nhau. Android lưu trữ bằng Google Drive iPhone lưu trên iCloud.

Một ví dụ về đa hình trong thực tế. Ta có 2 con vật: chó, mèo. Cả 2 con vật này đều là lớp động vật. Nhưng khi ta bảo cả 2 động vật kêu thì con chó sẽ kêu gâu gâu, con mèo sẽ kêu meo meo.

Vậy trong ví dụ chó, mèo xem như là các đối tượng. 2 con vật có thể hiểu cùng kêu nhưng theo các cách khác nhau.

Trong code để thể hiện tính đa hình có 2 cách:

  1. Method Overloading (compile time polymorphism)
  2. Method Overriding (run time polymorphism)

Tính đóng gói

Là cách để che dấu những tính chất xử lý bên trong của đối tượng, những đối tượng khác không thể tác động trực tiếp làm thay đổi trạng thái  chỉ có thể tác động thông qua các method public của đối tượng đó.

Như vậy khi ta muốn thay đổi các tính chất (properties) không thể tương tác trực tiếp với properties mà phải thông qua các method public được định nghĩa bên trong class

Tính trừu tượng

Là phương pháp trừu tượng hóa định nghĩa lên những hành động, tính chất của loại đối tượng nào đó cần phải có. Ví dụ khi bạn định nghĩa một lớp động vật(Animal), Animal thì có rất nhiều loại, làm sao để xác định đó là một loại động vật? lúc này bạn sẽ hình dung trong đầu động vật có những tính chất hành vi cơ bản nhất định phải có như ăn, nói khi bất kỳ một developer nào định viết một đối tượng thuộc lớp động vật sẽ kế thừa lại lớp Animal có 2 hành vi ăn, nói,đối tượng được tạo ra có thể khác nhau như chó hoặc mèo nhưng đều có những hành vi của động vật là ăn và nói. => Trong ví dụ trên nhìn vào hành vi ăn và nói của chó và mèo ta có thể khẳng định nó thuộc lớp động vật. Vậy chốt lại rõ làng tính trừu tượng ở đây sinh ra chủ yếu để trừu tượng hóa và định nghĩa các tính chất hành vi phải có để xác định đó là đối tượng gì dựa vào tính chất hành vi của đối tượng. => Các method trừu tượng đều rỗng không thực hiện bất kỳ hành vy nào, hành vy sẽ được triển khai cụ thể do các đối tượng kế thừa.

=> Chủ yếu là đưa ra các quy định, quy chuẩn cho các class con base theo, không có gì hot

Bài tập

1.Giải quyết 01 bài toán theo OOP, minh họa tính kế thừa, đa hình, tính bao gói.

Giải:

Minh họa tính kế thừa:

cho kế thừa mấy từ class này sang class khác..

Minh họa tính đa hình:

Đưa ra mấy class Thày Văn, Thày Toán, Thày Thể dụng, đều có phương thức là dạy, nhưng lúc dạy print ra khác nhau

Minh họa tính bao gói:

Đưa ra class Học sinh, không thể thay đổi thuộc tính kiến thức của học sinh vì nó là private, chỉ có thể thay đổi bằng cách dùng phương thức public của nó là học.

Minh họa tính trừu tượng:

<Tự các bạn trả lời>

2.Trình bày bản chất một số thành phần, tính chất của OOP thông qua chương trình như: phần tĩnh (static), phần động (dynamic), con trỏ this.

Biến tĩnh là biến sẽ dùng chung cho toàn bộ các đối tượng được sinh ra từ class đó, không thay đổi

public class Counter2 {
    static int count = 0; // sẽ lấy bộ nhớ chỉ một lần
 
    Counter2() {
        count++;
        System.out.println(count);
    }
 
    public static void main(String args[]) {
 
        Counter2 c1 = new Counter2();
        Counter2 c2 = new Counter2();
        Counter2 c3 = new Counter2();
 
    }
}

Kết quả

1
2
3

Biến động thì ngược lại

public class Counter1 {
    int count = 0; // sẽ lấy bộ nhớ khi instance được tạo ra
 
    Counter1() {
        count++;
        System.out.println(count);
    }
 
    public static void main(String args[]) {
 
        Counter1 c1 = new Counter1();
        Counter1 c2 = new Counter1();
        Counter1 c3 = new Counter1();
 
    }
}

Kết quả

1
1
1

Ngoài ra còn phương thức static:

  • Một phương thức static thuộc lớp chứ không phải đối tượng của lớp.
  • Một phương thức static gọi mà không cần tạo một instance của một lớp.
  • Phương thức static có thể truy cập biến static và có thể thay đổi giá trị của nó.

Khối static :v

public class A2 {
    static {
        System.out.println("Khối static: hello !");
    }
 
    public static void main(String args[]) {
        System.out.println("Main: hello !");
    }
}

3.Trình bày 02 kỹ thuật overloading (nạp chồng), ghi đè (overriding)

<Này bổ sung sau nhé, mệt ..>

Tham khảo:

https://viblo.asia/p/4-dac-tinh-cua-lap-trinh-huong-doi-tuong-object-oriented-program-XL6lAA7Nlek

https://viblo.asia/p/khac-nhau-giua-abstract-class-va-interface-khi-nao-dung-chung-ORNZq9YrZ0n

https://viettuts.vn/java/tu-khoa-static-trong-java

Published by Nhat Truong

Hi

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: