top of page

Thử làm bộ câu trả lời về chủ đề "Cần ôn luyện những gì khi đi phỏng vấn Fresher/Junior" - Phần 1

  • Writer: PhongPX
    PhongPX
  • Jun 2, 2020
  • 4 min read

Câu hỏi

Lập trình hướng đối tượng (OOP). Một số câu hỏi hay gặp là: 4 thuộc tính của OOP? Phân biệt Object và Class? Phân biệt Overload/Override/Inheritance? Abstract Class là gì, Interface là gì, 2 cái đấy giống và khác gì nhau?


Trả lời:

Lập trình hướng đối tượng hay còn gọi là OOP là một kĩ thuật hay nói dễ hiểu là một cách lập trình mà các developer sẽ đối tượng hóa code của mình. Vậy thứ cần đối tượng hóa ở đây là gì ?

đó có thể là các sự vật, sự việc mà giữa chúng có những đặc điểm, tính chất, hành động giống nhau. Trong lập trình OOP thì ta sẽ định nghĩa các class để mô hình hóa các đối tượng đó.


4 thuộc tính của OOP là: Kế thừa, đa hình, trừu tượng , và tính đóng gói

Tính kế thừa (Inheritance)

Cho phép lớp con không cần phải định nghĩa các phương thức hay dữ liệu của lớp cha. Khi lớp con kế thừa từ lớp cha thì lớp con có thể tái sử dụng lại mã nguồn.

Có một số loại kế thừa phổ biến như: Đơn kế thừa, đa kế thừa, kế thừa đa cấp, kế thừa thứ bậc.

Ví dụ:

Chúng ta có lớp cha là "Laptop", lớp con là các nhãn hiệu máy tính khác nhau như Lenovo, Dell, Macbook. Tuy cùng sở hữu những thuộc tính giống nhau như có bộ nhớ, card màn hình, bàn phím... nhưng các giá trị chỉ số của những thuộc tính ở những dòng máy tính khác nhau là khác nhau. Tuy nhiên chúng vẫn có thể kế thừa từ một lớp cha "Laptop" thay vì phải sao chép các thuộc tính đó riêng cho từng loại máy tính.


Tính đa hình (Polymorphism)

Hiểu nôm na tính đa hình là một phương thức ở lớp cha nhưng ở các lớp con thì lại được thể hiện khác nhau. Nhiều người xem sức mạnh hầu hết của OOP nằm trong tính chất này hết.

Ví dụ :

Một ví dụ điển hình cho tính điển hình để miêu tả tính đa hình đó là chúng ta có một lớp cha là lớp động vật, 2 lớp con kế thừa lớp cha có tên là Chó và Mèo, cùng có hàm Kêu những với Mèo thì lại là "Meo Meo" còn với Chó thì là "Gâu Gâu".


Tính đóng gói (Encapsulation)

Tính đóng gói trong lập trình hướng đối tượng được thể hiện ngay thông qua cái tên của nó.

Các dữ liệu, hay phương thức có liên quan đến nhau sẽ được thiết kế và quản lý trong một lớp Class. Mỗi lớp thì thể hiện đặc trưng riêng của lớp đó. Ngoài ra tính đóng gói còn được thể hiện ở chỗ che giấu thông tin của lớp thông qua các tầm vực Public, Protected, Private.

Ví dụ cho tính đóng gói thể hiện như khi bạn uống một viên thuốc cảm, thì bạn chỉ biết công dụng của nó là chữa cảm mà không biết rõ là bên trong đó được tạo thành từ những nguyên liệu gì.


Tính trừu tượng (Abstraction)

Tính trừu tượng được thể hiện rõ nhất thông qua các lớp trừu tượng . Tổng thể thì lớp trừu tượng vẫn là một lớp tuy nhiên không giống như các lớp bình thường khi không thể tạo được đối tượng từ lớp ấy mà chỉ có thể coi nó như một cái sườn, từ đó tạo các lớp con dựa vào sự ràng buộc với cái sườn ấy.


Phân biệt Object và Class

Để trả lời câu hỏi này, ta đi từ câu hỏi khái niệm trước, Object là gì ? Class là gì ?

Đối tượng (Object) là một thực thể, có thể là một con vật, một đồ vật... Ví dụ như ngôi nhà, cái xe, con người. Mỗi đối tượng sẽ có 3 đặc trưng riêng đó là:

  • Trạng thái: thể hiện qua các biến

  • Hành vi: các phương thức, method

  • Định danh: Vị trí lưu trong bộ nhớ và kích thước

Lớp (Class) là một tập hợp các đối tượng có điểm chung với nhau, người ta lưu lại thành một lớp.

Trong lập trình OOP thì người ta phải khai báo Class trước rồi khởi tạo Object sau.

Hiểu nôm na thì Class là một mẫu thiết kế có sẵn trước, còn khi thực thi mẫu thiết kế đó bằng cách nạp vào các giá trị, thông số thì ta lại có được một Object. Mỗi Object thì có thông số khác nhau nhưng vẫn phải tuân thủ theo bản thiết kế (Class) đã được định nghĩa trước đó.


Phân biệt Overload/Override/Inheritance

Override

Override là một tính năng cho phép một lớp con cung cấp một triển khai cụ thể của một phương thức đã được cung cấp tại lớp cha. Khi thực hiện như vậy thì ta nói lớp con đang ghi đè phương thức.

Override được sử dụng để thu được tính đa hình tại runtime.

Overload

Nạp chồng phương thức đơn giản là có vài phương thức trùng tên nhưng khác nhau về đối số trong cùng 1 class. Cài chồng phương thức cho phép ta tạo nhiều phiên bản của một phương thức, mỗi phiên bản chấp nhận một danh sách đối số khác nhau, nhằm tạo thuận lợi cho việc gọi phương thức.

Nạp chồng phương thức được sử dụng để thu được tinh đa hình tại compile time.

Ví dụ:

 class Calculation {
       void sum(int a, int b) {
               System.out.println(a + b);             
        }              
  
        void sum(int a, int b, int c) {                                                 
                system.out.println(a + b + c);             
         }         
 }

Phân biệt Abstract Class và Interface


Comments


Liên lạc tôi bằng cách dưới đây nha !

Thanks for submitting!

bottom of page