GP Coder

Trang chia sẻ kiến thức lập trình Java

  • Java Core
    • Basic Java
    • OOP
    • Exception Handling
    • Multi-Thread
    • Java I/O
    • Networking
    • Reflection
    • Collection
    • Java 8
  • Design pattern
    • Creational Pattern
    • Structuaral Pattern
    • Behavior Pattern
  • Web Service
    • SOAP
    • REST
  • JPA
  • Java library
    • Report
    • Json
    • Unit Test
  • Message Queue
    • ActiveMQ
    • RabbitMQ
  • All
Trang chủ Java Core OOP 4 tính chất của lập trình hướng đối tượng trong Java

4 tính chất của lập trình hướng đối tượng trong Java

Đăng vào 07/11/2017 . Được đăng bởi GP Coder . 30529 Lượt xem . Toàn màn hình

Trong những bài trước, tôi đã giới thiệu với các bạn Lập trình hướng đối tượng(OOPs) trong java, tính bao đóng (encapsulation), tính kế thừa (Inheritance), tính đa hình (polymorphism), tính trừu trượng (abstraction). Trong bài này, tôi sẽ tổng hợp lại 4 tính chất đó và đưa rõ ví dụ tổng hợp để các bạn dễ dàng hiểu được 4 tính chất này trong Java.

Nội dung

  • 1 4 tính chất của lập trình hướng đối tượng trong Java
  • 2 Ví dụ minh họa

4 tính chất của lập trình hướng đối tượng trong Java

Tính đóng gói (encapsulation) và che giấu thông tin (information hiding) :

  • Tức là trạng thái của đối tượng được bảo vệ không cho các truy cập từ code bên ngoài như thay đổi trong thái hay nhìn trực tiếp. Việc cho phép môi trường bên ngoài tác động lên các dữ liệu nội tại của một đối tượng theo cách nào là hoàn toàn tùy thuộc vào người viết mã. Đây là tính chất đảm bảo sự toàn vẹn, bảo mật của đối tượng
  • Trong Java, tính đóng gói được thể hiện thông qua phạm vi truy cập (access modifier). Ngoài ra, các lớp liên quan đến nhau có thể được gom chung lại thành package.

Tính kế thừa (inheritance):

  • Tính kế thừa là khả năng cho phép ta xây dựng một lớp mới dựa trên các định nghĩa của một lớp đã có. Lớp đã có gọi là lớp Cha, lớp mới phát sinh gọi là lớp Con và đương nhiên kế thừa tất cả các thành phần của lớp Cha, có thể chia sẻ hay mở rộng các đặc tính sẵn có mà không phải tiến hành định nghĩa lại.

Tính đa hình (polymorphism):

  • Khi một tác vụ được thực hiện theo nhiều cách khác nhau được gọi là tính đa hình.
  • Đối với tính chất này, nó được thể hiện rõ nhất qua việc gọi phương thức của đối tượng. Các phương thức hoàn toàn có thể giống nhau, nhưng việc xử lý luồng có thể khác nhau. Nói cách khác: Tính đa hình cung cấp khả năng cho phép người lập trình gọi trước một phương thức của đối tượng, tuy chưa xác định đối tượng có phương thức muốn gọi hay không. Đến khi thực hiện (run-time), chương trình mới xác định được đối tượng và gọi phương thức tương ứng của đối tượng đó. Kết nối trễ giúp chương trình được uyển chuyển hơn, chỉ yêu cầu đối tượng cung cấp đúng phương thức cần thiết là đủ.
  • Trong Java, chúng ta sử dụng nạp chồng phương thức (method overloading) và ghi đè phương thức (method overriding) để có tính đa hình.
    • Nạp chồng (Overloading): Đây là khả năng cho phép một lớp có nhiều thuộc tính, phương thức cùng tên nhưng với các tham số khác nhau về loại cũng như về số lượng. Khi được gọi, dựa vào tham số truyền vào, phương thức tương ứng sẽ được thực hiện.
    • Ghi đè (Overriding): là hai phương thức cùng tên, cùng tham số, cùng kiểu trả về nhưng thằng con viết lại và dùng theo cách của nó, và xuất hiện ở lớp cha và tiếp tục xuất hiện ở lớp con. Khi dùng override, lúc thực thi, nếu lớp Con không có phương thức riêng, phương thức của lớp Cha sẽ được gọi, ngược lại nếu có, phương thức của lớp Con được gọi.

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

  • Tính trừu tượng là một tiến trình ẩn các chi tiết trình triển khai và chỉ hiển thị tính năng tới người dùng. Tính trừu tượng cho phép bạn loại bỏ tính chất phức tạp của đối tượng bằng cách chỉ đưa ra các thuộc tính và phương thức cần thiết của đối tượng trong lập trình.
  • Tính trừu tượng giúp bạn tập trung vào những cốt lõi cần thiết của đối tượng thay vì quan tâm đến cách nó thực hiện.
  • Trong Java, chúng là sử dụng abstract class và abstract interface để có tính trừu tượng.

Ví dụ minh họa

Animal.java

package com.gpcoder.oop;

public abstract class Animal {
	
	private String name;
	
	public Animal(String name) {
		this.name = name;
	}
	
	public abstract void sayHello();

	public String getName() {
		return name;
	}
	
}

Cat.java

package com.gpcoder.oop;

public class Cat extends Animal {
	
	public Cat(String name) {
		super(name);
	}

	@Override
	public void sayHello() {
		System.out.println("Hi, I'm " + super.getName());
	}
	
}

Dog.java

package com.gpcoder.oop;

public class Dog extends Animal {
	
	public Dog(String name) {
		super(name);
	}

	@Override
	public void sayHello() {
		System.out.println("Hello, I'm " + super.getName());
	}
	
}

Zoo.java

package com.gpcoder.oop;

import java.util.ArrayList;
import java.util.List;

public class Zoo {

	private List<Animal> animals = new ArrayList<Animal>();
	
	public void add(Animal animal) {
		animals.add(animal);
	}
	
	public void remove(Animal animal) {
		animals.remove(animal);
	}
	
	public void showListAnimal() {
		for (Animal animal : animals) {
			animal.sayHello();
		}
	}
	
}

OopDemo.java

package com.gpcoder.oop;

public class OopDemo {
	
	public static void main(String[] args) {
		Cat cat = new Cat("Tom");
		Dog dog = new Dog("Milu");
		
		Zoo zoo = new Zoo();
		zoo.add(cat);
		zoo.add(dog);
		zoo.showListAnimal();
	}
	
}

Kết quả:

Hi, I'm Tom
Hello, I'm Milu

Các tính chất của lập trình hướng đối tượng đươc sử dụng thông qua ví dụ trên:

  • Tạo abstract class Animal có phương thức sayHello. abstract class này thể hiện tính trừu tượng, có nghĩa ta định ra rằng dù là con vật gì đi nữa thì nó cũng có phương thức sayHello.
  • Tạo 2 lớp Cat và Dog kế thừa từ Animal. Khi khởi tạo chúng sẽ có tên. Chúng override lại phương thức sayHello để chào hỏi theo cách riêng của chúng. Điều này thể hiện tính đóng gói (đóng gói biến tên và phương thức sayHello với nhau) và tính thừa kế (Cat và Dog mang đặc điểm chung là có sayHello từ Animal).
  • Tạo lớp Zoo để quản lí nhiều Animal, có (1) phương thức add, remove để thêm, bớt các Animal (các đối tượng của các lớp thừa kế từ Animal), (2) phương thức showListAnimal để gọi sayHello của tất cả đối tượng nó quản lí. Điều này thể hiện tính đa hình, Zoo gọi chỉ gọi một phương thức sayHello, nhưng tùy con vật mà lời chào hỏi sẽ khác nhau.
4.9
54
Nếu bạn thấy hay thì hãy chia sẻ bài viết cho mọi người nhé! Và Donate tác giả

Shares

Chuyên mục: OOP Được gắn thẻ: Basic Java, OOP

Từ khóa throw và throws trong Java
Custom Exception trong Java

Có thể bạn muốn xem:

  • Các nguyên lý thiết kế hướng đối tượng – SOLID (09/08/2018)
  • Toán tử instanceof trong java (03/11/2017)
  • Từ khóa static và final trong java (02/11/2017)
  • Tính đa hình (Polymorphism) trong Java (05/11/2017)
  • Tính trừu tượng (Abstraction) trong Java (05/11/2017)

Bình luận

bình luận

Tìm kiếm

Bài viết mới

  • Clean code 13/01/2024
  • Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud 02/10/2020
  • Kết nối RabbitMQ sử dụng Web STOMP Plugin 19/06/2020
  • Sử dụng publisher confirm trong RabbitMQ 16/06/2020
  • Sử dụng Dead Letter Exchange trong RabbitMQ 13/06/2020

Xem nhiều

  • Hướng dẫn Java Design Pattern – Factory Method (98059 lượt xem)
  • Hướng dẫn Java Design Pattern – Singleton (97700 lượt xem)
  • Giới thiệu Design Patterns (87764 lượt xem)
  • Lập trình đa luồng trong Java (Java Multi-threading) (86434 lượt xem)
  • Giới thiệu về Stream API trong Java 8 (83839 lượt xem)

Nội dung bài viết

  • 1 4 tính chất của lập trình hướng đối tượng trong Java
  • 2 Ví dụ minh họa

Lưu trữ

Thẻ đánh dấu

Annotation Authentication Basic Java Behavior Pattern Collection Creational Design Pattern Cấu trúc điều khiển Database Dependency Injection Design pattern Eclipse Exception Executor Service Google Guice Gson Hibernate How to Interceptor IO Jackson Java 8 Java Core JDBC JDK Jersey JMS JPA json JUnit JWT Message Queue Mockito Multithreading OOP PowerMockito RabbitMQ Reflection Report REST SOAP Structuaral Pattern Swagger Thread Pool Unit Test Webservice

Liên kết

  • Clean Code
  • JavaTpoint
  • Refactoring Guru
  • Source Making
  • TutorialsPoint
  • W3Schools Online Web Tutorials

Giới thiệu

GP Coder là trang web cá nhân, được thành lập với mục đích lưu trữ, chia sẽ kiến thức đã học và làm việc của tôi. Các bài viết trên trang này chủ yếu về ngôn ngữ Java và các công nghệ có liên quan đến Java như: Spring, JSF, Web Services, Unit Test, Hibernate, SQL, ...
Hi vọng góp được chút ít công sức cho sự phát triển cộng đồng Coder Việt.

Donate tác giả

Tìm kiếm các bài viết của GP Coder với Google Search

Liên hệ

Các bạn có thể liên hệ với tôi thông qua:
  • Trang liên hệ
  • Linkedin: gpcoder
  • Email: contact@gpcoder.com
  • Skype: ptgiang56it

Follow me

Copyright 2025 © GP Coder · All Rights Reserved · Giới thiệu · Chính sách · Điều khoản · Liên hệ ·

Share

Blogger
Delicious
Digg
Email
Facebook
Facebook messenger
Flipboard
Google
Hacker News
Line
LinkedIn
Mastodon
Mix
Odnoklassniki
PDF
Pinterest
Pocket
Print
Reddit
Renren
Short link
SMS
Skype
Telegram
Tumblr
Twitter
VKontakte
wechat
Weibo
WhatsApp
X
Xing
Yahoo! Mail

Copy short link

Copy link