15 câu hỏi thường gặp về OOP

1> Class và object giống và khác nhau thế nào?

Class là đặc tả, quy ước để tạo ra các object. Các object được tạo ra bắt buộc phải tuân theo những quy ước đã được đề ra khi khai báo class. Có thể xem class như khuôn mẫu để đúc ra các object. Mỗi khuôn mẫu có thể đúc ra nhiều object khác nhau.

  • Giống nhau: đều có những đặc tính chung đã được khai báo trong class.
  • Khác nhau: class là một đặc tả (khuôn), object là một thể hiện cụ thể của đặc tả đó (sản phẩm được đúc từ khuôn)

2> Constructor là gì?

Constructor là phương thức đặc biệt sẽ tự động được thực thi khi tạo ra các object. Có thể xem constructor như một hàm để xây dựng/cài đặt object. Mỗi class có thể đặc tả một hoặc nhiều constructor khác nhau, cho phép tạo ra các object theo nhiều cách khác nhau.

3> Các tính chất của OOP?

Có 3 tính chất trong OOP:

  • Tính bao đóng (Encapsulation): tính chất này nói rằng class nên che giấu (không cho phép truy xuất) những phương thức hay truy cập thuộc tính mà chúng không nên truy cập. Điều này sẽ đảm bảo sự đúng đắn logic của class được khai báo. Lấy ví dụ một đối tượng xe hơi, xe hơi sẽ hoạt đồng tốt nếu người dùng sử dụng nó trong đúng khuôn phép mà nhà sản xuất đã hướng dẫn. Nếu có những tác động không mong muốn (truy xuất những tính năng không được phép) như xoay vô lăng vượt quá khoảng giới hạn, dốc ngược thùng xăng sau khi đã mở nắp thì việc xe hơi hoạt động không đúng mong muốn là điều rất có thể sẽ xảy ra. Quá trình thiết kế một class cũng vậy, nên bao đóng nó tốt, nó chỉ nên được sử dụng theo cách mà lập trình viên tạo ra nó dự đoán trước.
  • Tính kế thừa (Inheritance): Một trong những quy tắc quan trọng của lập trình là không nên viết 1 đoạn code (logic) quá 1 lần. Do đó lập trình viên cần phải thiết kế chương trình để có thể sử dụng lại những đoạn logic đã được viết. Tính kế thừa trong hướng đối tượng cho phép chúng ta làm điều này. Việc kế thừa một class cho phép class cha thừa hưởng những tính chất (logic) mà class con đã được hiện thực.
  • Tính đa hình (Polymorphism): Mặc dù khi kế thừa, class cha thừa hưởng những đặc tính từ class con, nhưng đôi lúc class cha cũng có nhu cầu thay đổi những đặc tính này. Tính đa hình sẽ giúp chúng ta làm việc đó. Ví dụ ta có lớp Duck và Chicken kế thừa từ lớp Animal. Mặc dù cả 2 lớp đều kế thừa phương thức SaySomething (kêu), mỗi con vật sẽ có một tiếng kêu khác nhau. Do đó mỗi class Duck hay Chicken đều cần phải hiện thực lại phương thức đó.

4> Các thành phần của 1 class?

  • Dữ liệu (data member bao gồm các biến, các property). Dữ liệu cho chúng ta biết class đó có tính chất gì.
  • Phương thức cho chúng ta biết chúng ta có thể làm được gì trên class đó.

5> Property là gì? Tại sao? (dành cho .NET)

Property là một phương thức để đọc hoặc chỉnh sửa dữ liệu trong class. Sử dụng property giúp cho việc đọc, sửa dữ liệu an toàn hơn bằng cách quản lý logic của việc đọc, sửa này.

6> Thế nào là overloading?

Overloading là cách khai báo hàm có cùng tên với hàm có sẵn và khác nhau về tham số được truyền vào hàm đó.

7> Phân biệt private, protected, public? (access modifiers)

  • private là những tài nguyên của một class chỉ cho phép những phương thức trong bản thân class đó truy xuất.
  • protected là những tài nguyên cho phép các phương thức trong class đó và những class kế thừa class đó truy xuất
  • public là những tài nguyên cho phép tất cả các phương thức nằm trong hay ngoài class đều có thể truy xuất.

8> Sealed class là gì / từ khóa sealed để làm gì ?

Sealed class là class không cho phép bất kỳ class nào khác kế thừa nó.

9> Static là gì?

static là những tài nguyên được cấp phát ngay khi chương trình bắt đầu chạy mà không quan tâm đến class chứa nó đã được khởi tạo hay chưa. Tính chất:

  • static class bắt buộc những dữ liệu và phương thức trong class đó phải là static
  • các tài nguyên static được truy xuất thông qua tên lớp chứa nó
  • static method chỉ có thể truy xuất đến các tài nguyên static khác nằm ngoài nó.

10> Reference Type và Value Type là gì?

Reference Type chỉ chứa địa chỉ (reference) đến đối tượng (hoặc có thể hiểu là giá trị của đối tượng), Value Type chứa giá trị thật sự của đối tượng đó. Tham khảo thêm bài viết Con Trỏ Trong C++/C#/Java để biết rõ thêm chi tiết.

11> abstract class là gì?

Là class chứa ít nhất một phương thức abstract. Phương thức abstract là phương thức được khai báo với keyword abstract được đặt tại đầu đoạn khai báo là phương thức chỉ thể hiện tính chất, ngữ nghĩa của hàm đó chứ chưa được hiện thực cụ thể, do đó ta không thể tạo instance của một abstract class. Những class con sau khi kế thừa từ abstract class sẽ hiện thực những hàm này.

12> Phân biệt abstract và virtual?

  • abstract bắt buộc lớp con phải hiện thực những phương thức này (vì abstract method chỉ khai báo chứ không được hiện thực ở class cha)
  • virtual method là phương thức đã được hiện thực nhưng cho phép lớp con override lại phương thức này (nếu không override cũng không sao).

13> delegate là gì? Tại sao phải dùng delegate?

Delegate là phương thức để “trao” quyền xử lý một sự kiện cho một hoặc nhiều đối tượng. Việc trao quyền này giúp:

  • class làm việc đó không phải xử lý quá nhiều logic (khác nhau) tránh trường hợp class này phải chịu quá nhiều trách nhiệm (responsibility).
  • định nghĩa và quản lý các xử lý nằm ngoài tầm hiểu biết của class chứa nó.

14> event là gì?

event là một thông điệp thông báo sự thay đổi trạng thái của một object được gửi đến các object đăng ký “lắng nghe” những sự thay đổi trên object này.

15> các keyword this và super là gì?

  • this: là từ khóa đại diện cho đối tượng của chính class đang được cài đặt
  • super: là từ khóa đại diện cho class cha của class đang được cài đặt
2 Comments
  • Minh
    Posted at 16:26h, 03 June Reply

    Bài viết tào lao. OOP có 4 tính chất cơ mà

    • admin
      admin
      Posted at 09:52h, 26 July Reply

      Bạn có dẫn chứng ko ?

Post A Comment