Có thể nói kiến thức về OOP là vô cùng quan trọng trên con đường học lập trình cũng như để trở thành một lập trình viên.
Đây là series đầu tay của mình về OOP được thể hiện bằng ngôn ngữ Java.
Hy vọng series này sẽ giúp ích cho các bạn đang học lập trình và có ý định trở thành một lập trình viên

Tóm tắt nội dung

Ở blog này mình sẽ trình bày về thuật ngữ Lập trình hướng đối tượng và các thành phần quan trọng:

  • Đối tượng ở thế giới thật
  • Đối tượng trong lập trình
  • Class trong Java

Đối tượng là gì

Đầu tiên, trước khi tìm hiểu về lập trình hướng đối tượng là gì chúng ta cùng tìm hiểu đối tượng là gì. Điều này vô cùng giúp ích cho việc hiểu rõ về thuật ngữ và các công nghệ hướng đối tượng.
Bây giờ, các bạn hãy ngồi xuống và nhìn xung quanh. Các bạn sẽ tìm thấy rất nhiều vật thể ở thế giới thật
Ví dụ như, hiện tại mình đang ngồi ở The Coffee House, một chiếc đèn rực rỡ, một tấm bảng hiệu nhiều màu sắc...và một cô gái xinh đẹp :3

Các vật thể ở thế giới thật có 2 đặc điểm chính đó là trạng thái (states) và hành vi (behaviors) :

  • Nói về states của một Laptop, ta có thể nói về dung lượng ram, hệ điều hành đang được cài đặt, hoặc là kích thước màn hình...
    Còn cô gái xinh đẹp mình đang nhìn, cô ấy mảnh khảnh, cao tầm 1m6, đôi môi trái tim quyến rũ :3
  • Nói về behaviors, một cái laptop có các hành vi như : Đang khởi động, đang tắt, đang in gì đó...
    Còn về một chú mèo thì sao, ta có các hành vi như: Đang ăn, đang uống...

Đối tượng trong lập trình

Đối tượng (object) trong lập trình hương đối tượng cũng có 2 đặc điểm giống như các vật thể trong thế giới thật đó là states và behaviors.
Object lưu trữ các states trong các trường dữ liệu (fields), được biết đến như là các biến (variables).
Và behaviors được định nghĩa trong các hàm (methods).

Class trong Java

Có thể nói Class là bản thiết kế của Object.

    
    package vnl.ntn;

    public class Main {
    
        public static void main(String[] args) {
    
        }
    }
    
    

public class Main là cú pháp (statement) để khai báo một class trong Java.
Câu hỏi là "Tại sao chúng ta lại quan tâm đến những class?", "Những lợi ích từ classes cho việc lập trình là gì?"

Hãy nghĩ về các kiểu dữ liệu cơ bản mà chúng ta đã làm việc như là int, short...chúng đều là các loại dữ liệu cơ bản. Chúng hạn chế, và bạn không thể làm gì nhiều với những kiểu dữ liệu này. Trong trường hợp này Class có thể coi là một kiểu dữ liệu mạnh mẽ. Kiểu dữ liệu mà người dùng có thể tự định nghĩa, Class cho phép bạn tạo ra kiểu dữ liệu mạnh mẽ hơn những loại nguyên thủy thông thường mà bạn đã từng xử lý

Bây giờ chúng ta sẽ định nghĩa một class mới

    
    package vnl.ntn;

    public class Car {
    
    }
    
    

Điều đầu tiên mình muốn các bạn chú ý đó là package , và dòng tiếp theo đó là public class Car. Đó là statement để định nghĩa một Class.
Từ khóa public nghĩa là quyền truy cập không giới hạn vào Class. Thông thường khi khởi tạo Class, các bạn cứ sử dụng public. Khi có sự điều chỉnh về quyền truy cập bạn có thể lựa chọn các sự thay thế như :

  • private: Những Class khác không thể truy cập đến Class của bạn
  • protected: Cho phép những Class khác trong cùng package truy cập đến Class của bạn

Mình sẽ đề cập về vấn đề này trong các bài viết tới

Bây giờ chúng ta sẽ khởi tạo các variables cho class Car, chúng là các trường dữ liệu (field) của class Car

    
    package vnl.ntn;

    public class Car {
        public int doors;
        public String colour;
        private String engine;
    }
    
    

Sau đó chung ta sẽ khởi tạo một đối tượng thuộc class Car trong hàm main()

    
    package vnl.ntn;

    public class Main {
    
        public static void main(String[] args) {
            Car porsche = new Car();
        }
    }
    
    

Các bạn hãy thử xem các thuộc tính và phương thức của đối tượng porsche vừa tạo bằng cách gõ "porsche."

Như các bạn thấy đấy:

  • field engine không được hiện ra cũng như đối tượng porsche vừa tạo không thể truy cập đến thuộc tính engine của lớp Car bởi vì thuộc tính của field này là private hay nói cách khác Java sử dụng thuộc tính private để ẩn đi những thuộc tính và hàm của đối tượng.
    Đây là tính đóng gói (encapsulation) trong Java.
  • Ngoài ra các bạn có thể thấy thêm những methods khác như equals, hashCode, toString...các methods này được thêm vào bởi Java khi khởi tạo một đối tượng. Bạn có thể hiểu là những phương thức này được kế thừa từ Java. Đây là ví dụ cho tính kế thừa (Inheritance) trong Java.

Chúng ta sẽ bàn tới những vấn đề này trong blog tiếp theo

Mã nguồn Java

Mã nguồn