ngôn ngữ lập trình hướng đối tượng là một mô hình lập trình phổ biến và được coi là tiêu chuẩn cho hầu hết các lập trình viên . Ngày nay, lập trình hướng đối tượng được sử dụng trong nhiều ngôn ngữ lập trình như Typescript, Dart, Python, Java, Ruby,... Vậy, lập trình hướng đối tượng có gì đặc biệt? Hãy cùng tìm hiểu khái niệm cơ bản của nó.
Class và Object
Lập trình hướng đối tượng dựa trên khái niệm về Class và Object. Class là một kiểu dữ liệu do người dùng định nghĩa, có thuộc tính và phương thức. Object là thể hiện của kiểu dữ liệu đó. Mỗi object có thể có giá trị khác nhau cho các thuộc tính và có thể gọi các phương thức của class đó.
Ví dụ về Class và Object trong ngôn ngữ Java:
public class Nguoi { String hoVaTen; int tuoi; String gioiTinh; String diaChi; boolean giau; void an() { //... } void ngu() { //... } void xemTV() { //... } } Nguoi nguoi1 = new Nguoi(); nguoi1.hoVaTen = "Will Smith"; nguoi1.tuoi = 20; nguoi1.gioiTinh = "Nam"; nguoi1.diaChi = "Mĩ"; nguoi1.giau = true;
Class có thể được coi là bản vẽ của một ngôi nhà, còn Object là ngôi nhà cụ thể được xây dựng.
Đóng gói
Tính đóng gói trong lập trình hướng đối tượng có ý nghĩa quan trọng. Các thuộc tính của một Class thường được định nghĩa là private và phải sử dụng getter và setter để đọc và ghi giá trị của chúng.
public class Nguoi { private String hoVaTen; private int tuoi; private String gioiTinh; private String diaChi; private boolean giau; public String getHoVaTen() { return hoVaTen; } public void setHoVaTen(String hoVaTen) { this.hoVaTen = hoVaTen; } //... }
Việc sử dụng getter và setter giúp giảm rủi ro và tạo khả năng mở rộng cho Class trong tương lai.
Kế thừa
Kế thừa cho phép một Class con thừa hưởng các thuộc tính và phương thức của một Class cha. Điều này giúp tái sử dụng code và tạo ra các Class có quan hệ IS-A.
public class LapTrinhVien extends Nguoi { private String chucVu; private float luong; private boolean biTri; //... }
Class con có thể truy cập và sử dụng các thuộc tính và phương thức của Class cha.
Đa hình
Đa hình cho phép cùng một hành động có thể được thực hiện theo nhiều cách khác nhau tuỳ thuộc vào hoàn cảnh. Đa hình có thể đạt được thông qua ghi đè phương thức (Method Overriding) và nạp chồng phương thức (Method Overloading).
Ví dụ về ghi đè phương thức:
class DongVat{ public void keu() { System.out.println("Kêu"); } } class Cho extends DongVat { @Override public void keu() { System.out.println("Gâu gâu"); } } class Meo extends DongVat { @Override public void keu() { System.out.println("Meo meo"); } } class Vit extends DongVat { @Override public void keu() { System.out.println("Quạc quạc"); } }
Ví dụ về nạp chồng phương thức:
class Nguoi { public void chao() { System.out.println("Xin chào"); } public void chao(String hoTen) { System.out.println("Xin chào, " + hoTen); } public void chao(String hoTen1, String hoTen2) { System.out.println("Xin chào, " + hoTen1 + " và " + hoTen2); } } Nguoi nguoi = new Nguoi(); nguoi.chao(); nguoi.chao("Will Smith"); nguoi.chao("Will Smith", "Chris Rock");
Trừu tượng
Trừu tượng là khả năng tập trung vào "What it does" mà không cần quan tâm đến "How it does". Java hỗ trợ trừu tượng thông qua abstract class và interface.
Với abstract class, các phương thức chỉ có phần khai báo, và các class con phải triển khai phần thân của các phương thức đó.
abstract class Vehicle{ abstract void start(); abstract void stop(); abstract void accelerate(); abstract void brake(); } class Car extends Vehicle{ void start() { //code here… } void stop() { //code here… } void accelerate() { //code here… } void brake() { System.out.println("Car braked"); } } class Bike extends Vehicle{ //... } class Scooter extends Vehicle{ //... }
Hy vọng qua bài viết này, bạn đã hiểu tổng quan và những khái niệm cơ bản của lập trình hướng đối tượng. Để tiếp cận tốt hơn với lập trình hướng đối tượng, hãy thực hành nhiều và không chỉ đọc lý thuyết. Lập trình hướng đối tượng rất quan trọng và được sử dụng rộng rãi trong các ngôn ngữ và công nghệ như Typescript, Dart, Python, Java,... Vì vậy, hãy dành thời gian và công sức để hiểu sâu về nó.
Ảnh được sử dụng từ nguồn: nanado.edu.vn