Skip to content
Home » Tính Trừu Tượng Là Gì | Sự Khác Nhau Giữa Abstract & Interface

Tính Trừu Tượng Là Gì | Sự Khác Nhau Giữa Abstract & Interface

Phỏng vấn: tính trừu tượng và biểu hiện của nó?

Các loại hình trừu tượng trong OOP

Trong OOP, có hai loại trừu tượng là: Trừu tượng hóa dữ liệu (Data Abstraction) và Trừu tượng hóa quy trình (Process Abstraction).

Trừu tượng hóa dữ liệu

Khi dữ liệu của đối tượng không hiển thị ra bên ngoài, thì đó gọi là Trừu tượng hóa dữ liệu. Nếu cần, lập trình viên có thể cấp quyền truy cập vào dữ liệu của đối tượng bằng nhiều cách. Thông thường họ sử dụng một số phương thức, chẳng hạn như get, set.

Trừu tượng hóa quy trình

Lập trình viên không cần phải cung cấp chi tiết về tất cả các chức năng khác nhau của một đối tượng. Khi họ ẩn việc triển khai nội bộ của các chức năng liên quan đến hoạt động của người dùng, đó gọi là Trừu tượng hóa quy trình.

Một điểm lưu ý cuối cùng, đó là tùy vào mỗi ngôn ngữ mà Tính trừu tượng sẽ khác nhau. Khi sử dụng ngôn ngữ nào, bạn cần nghiên cứu kỹ về Tính trừu tượng của ngôn ngữ đó. Hy vọng qua bài viết này, các bạn đã hiểu rõ hơn về Tính trừu tượng trong OOP.

Tham khảo: Journaldev.com

Abstraction trong OOP – Tính trừ tượng trong lập trình hướng đối tượng là gì

12/08/2022 02:24

Abstract là khái niệm của lập trình hướng đối tượng chỉ “hiển thị” các thuộc tính thiết yếu và “ẩn” thông tin không cần thiết. Mục đích chính của trừu tượng là che giấu những chi tiết không cần thiết khỏi người dùng. Tính trừu tượng là chọn dữ liệu từ một nhóm lớn hơn để chỉ hiển thị các chi tiết có liên quan của đối tượng cho người dùng. Nó giúp giảm độ phức tạp và nỗ lực lập trình. Đây là một trong những khái niệm quan trọng nhất của OOP.

Minh họa về Tính trừu tượng

Tính trừu tượng trong đời sống

Trừu tượng là một khái niệm khá phổ biến trong thực tế. Nó xuất hiện trong nhiều lĩnh vực như hội họa, kiến trúc hay thiết kế,…

Chẳng hạn, một chiếc xe hoạt động cần rất nhiều bộ phận bên trong làm việc, nhưng tất cả những thông tin đó không cần thiết với người lái. Người lái chỉ cần sử dụng những công cụ như: bàn đạp ga, phanh, vô lăng, đèn nháy. Các kỹ thuật phức tạp đều được ẩn khỏi trình điều khiển. Nghĩa là bạn chỉ cần biết cách lái xe, chứ không cần quan tâm những chi tiết về cách thức động cơ hoạt động.

Tương tự, có rất nhiều cách để máy tính của bạn kết nối với một mạng cục bộ, như Ethernet, Wi-Fi, modem quay số,… Tuy nhiên, trình duyệt Web không phải bận tâm đến việc bạn dùng mạng nào, bởi vì các phần mềm sẽ cung cấp một khái niệm trừu tượng chung để trình duyệt hiểu. Trong trường hợp này, “kết nối mạng” là sự trừu tượng, còn Ethernet và Wi-Fi,… là những triển khai cho sự trừu tượng đó.

Tính trừu tượng trong OOP

Trong Python, một lớp chứa một hoặc nhiều phương thức trừu tượng được gọi là lớp trừu tượng. Còn các phương thức trừu tượng không chứa bất kỳ lệnh triển khai (implements) nào. Thay vào đó, tất cả các lệnh triển khai có thể được định nghĩa trong các phương thức của lớp con kế thừa lớp trừu tượng.

Sau đây là một ví dụ về Tính trừu tượng trong OOP được viết theo ngôn ngữ lập trình Python:

Từ đoạn mã trên, chúng ta thấy lớp “Shape” sẽ kế thừa lớp “ABC”. Trong trường hợp này, lớp “Shape” được gọi là lớp trừu tượng. Chúng ta sẽ tiếp tục định nghĩa các phương thức trừu tượng bên trong nó.

Cụ thể, “Calcul_area” chính là phương thức trừu tượng của “Shape”. Như đã nói ở trên, phương thức trừu tượng không cần phải thêm mã mới, mà chỉ cần dùng lệnh “pass”.

Phỏng vấn: tính trừu tượng và biểu hiện của nó?
Phỏng vấn: tính trừu tượng và biểu hiện của nó?

Tính trừu tượng và tư duy trong lập trình OOP

Bài đăng này đã không được cập nhật trong 4 năm

Lập trình hướng đối tượng là gì?

Lập trình hướng đối tượng (tiếng Anh: Object-oriented programming, viết tắt: OOP) là một mẫu hình lập trình dựa trên khái niệm “công nghệ đối tượng”, mà trong đó, đối tượng chứa đựng các dữ liệu, trên các trường, thường được gọi là các thuộc tính; và mã nguồn, được tổ chức thành các phương thức. Phương thức giúp cho đối tượng có thể truy xuất và hiệu chỉnh các trường dữ liệu của đối tượng khác, mà đối tượng hiện tại có tương tác (đối tượng được hỗ trợ các phương thức “this” hoặc “self”). Trong lập trình hướng đối tượng, chương trình máy tính được thiết kế bằng cách tách nó ra khỏi phạm vi các đối tượng tương tác với nhau.[1][2] Ngôn ngữ lập trình hướng đối tượng khá đa dạng, phần lớn là các ngôn ngữ lập trình theo lớp, nghĩa là các đối tượng trong các ngôn ngữ này được xem như thực thể của một lớp, được dùng để định nghĩa một kiểu dữ liệu. (theo wiki)

Bốn tính chất của OOP

Lập trình hướng đối tượng là một phương pháp lập trình có 4 tính chất chính sau:

  1. Tính trừu tượng (abstraction): Đây là khả năng của chương trình bỏ qua hay không chú ý đến một số khía cạnh của thông tin mà nó đang trực tiếp làm việc lên, nghĩa là nó có khả năng tập trung vào những cốt lõi cần thiết. Mỗi đối tượng phục vụ như là một “động tử” có thể hoàn tất các công việc một cách nội bộ, báo cáo, thay đổi trạng thái của nó và liên lạc với các đối tượng khác mà không cần cho biết làm cách nào đối tượng tiến hành được các thao tác. Tính chất này thường được gọi là sự trừu tượng của dữ liệu.

Tính trừu tượng còn thể hiện qua việc một đối tượng ban đầu có thể có một số đặc điểm chung cho nhiều đối tượng khác như là sự mở rộng của nó nhưng bản thân đối tượng ban đầu này có thể không có các biện pháp thi hành. Tính trừu tượng này thường được xác định trong khái niệm gọi là lớp trừu tượng hay lớp cơ sở trừu tượng.

  1. Tính đóng gói (encapsulation) và che giấu thông tin (information hiding): Tính chất này không cho phép người sử dụng các đối tượng thay đổi trạng thái nội tại của một đối tượng. Chỉ có các phương thức nội tại của đối tượng cho phép thay đổi trạng thái của nó. 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 của đối tượng.

  2. Tính đa hình (polymorphism): Thể hiện thông qua việc gửi các thông điệp (message). Việc gửi các thông điệp này có thể so sánh như việc gọi các hàm bên trong của một đối tượng. Các phương thức dùng trả lời cho một thông điệp sẽ tùy theo đối tượng mà thông điệp đó được gửi tới sẽ có phản ứng khác nhau. Người lập trình có thể định nghĩa một đặc tính (chẳng hạn thông qua tên của các phương thức) cho một loạt các đối tượng gần nhau nhưng khi thi hành thì dùng cùng một tên gọi mà sự thi hành của mỗi đối tượng sẽ tự động xảy ra tương ứng theo đặc tính của từng đối tượng mà không bị nhầm lẫn.

Ví dụ khi định nghĩa hai đối tượng “hinh_vuong” và “hinh_tron” thì có một phương thức chung là “chu_vi”. Khi gọi phương thức này thì nếu đối tượng là “hinh_vuong” nó sẽ tính theo công thức khác với khi đối tượng là “hinh_tron”.

  1. Tính kế thừa (inheritance): Đặc tính này cho phép một đối tượng có thể có sẵn các đặc tính mà đối tượng khác đã có thông qua kế thừa. Điều này cho phép các đối tượng 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. Tuy nhiên, không phải ngôn ngữ định hướng đối tượng nào cũng có tính chất này. (theo wiki)

Tính trừu tượng và tư duy trong lập trình OOP

Thầy giáo dạy công nghệ phần mềm trước đây của tôi đã từng nói một câu đại loại rằng:

Khả năng yếu nhất của lập trình viên Việt Nam là tính trừu tượng hoá.

Thời điểm đó tôi không thực sự tán thành, nhưng trớ trêu thay càng ngày tôi càng mất đi những lý lẽ đủ thuyết phục để phản biện lại nhận xét này.

Tôi đã từng làm việc ở khá nhiều công ty về công nghệ, từ những tập đoàn lớn cho tới những startup chỉ khoảng vài ba người, từ outsourcing cho tới những công ty làm về product, ERP hay dịch vụ tài chính.

Ở đâu tôi cũng tình cờ gặp những đoạn code kiểu dạng như sau:
Một ngày nọ chúng tôi được yêu cầu triển khai chức năng cho phép gửi email cho khách hàng khi phát sinh biến động về tài chính trong tài khoản cá nhân.
Ai đó ngay lập tức tạo class

sendEmail()

nhằm hiện thực hoá chức năng này trong vòng 30 phút. So far so good.


public void sendEmail(string email, string content...)

Một thời gian sau, chúng tôi được yêu cầu tiếp tục triển khai thêm chức năng gửi SMS vào luồng xử lý hiện tại. Một vài người đề xuất tạo thêm phương thức

sendSMS()

vào class

SMS

mới với phương thức

sendSMS()

.


public void sendSMS(string phoneNumber, string content...)

Mọi chuyện có vẻ vẫn ổn, cho đến khi chúng tôi tiếp tục được đề nghị triển khai chức năng gửi notification vào trang cá nhân của khách hàng.
Một vài người vẫn cố chấp tin tưởng rằng nên tiếp tục tạo thêm class với tên gọi Notification, một vài người khác bắt đầu lờ mờ nhận ra rằng họ đã sai ngay từ những thiết kế ban đầu, nhưng bởi đã có quá nhiều

dependencies

được tạo ra và không còn cách nào khác ngoài việc tiếp tục chuỗi sai lầm tệ hại để không phá vỡ kết cấu hệ thống (mà họ cho rằng hợp lý).

Bất cứ lập trình viên nào hiểu biết về OOP đều có thể nhận thức được rằng, tất cả những gì nên được tạo ra là class

Sender

với phương thức

sendMessage()

, nhưng không nhiều người nhận ra ý tưởng đó ngay từ những bước thiết kế đầu tiên.

Sai lầm phổ biến trong design hệ thống là người ta quá tin tưởng và những gì mình biết và khẳng định sẽ không có sự thay đổi. Nhưng không! chúng ta không hiểu rõ như chúng ta tưởng. Tôi đã từng đọc được một câu nói (nào đó), của một người nổi tiếng (nào đó không nhớ tên), đại loại là:

Sau một thời gian triển khai, chúng tôi nhận ra rằng thứ mình tạo ra hoàn toàn khác so với những tưởng tượng ban đầu về chúng.

Nếu không thể biết trước những gì sẽ thay đổi, hãy trừu tượng hoá nó nhiều nhất có thể. Abstraction luôn là một trong những yếu tố quan trọng nhất của OOP, nhưng không nhiều người thực sự nhận thức được điều này. Nhưng ngay cả khi chúng ta hiểu được điều đó, liệu đã là đủ? Tôi đã từng thấy một lập trình viên “có kinh nghiệm” triển khai class Sender với những phương thức sau:


public void sendEmail(string email, string content...)


public void sendSMS(string phoneNumber, string content...)

Rõ ràng rằng email, phoneNumber hay content nên là những thuộc tính của object và chỉ được phép tương tác thông qua method get(), set() hay contructor(). Vấn đề ngay lập tức phát sinh khi tôi muốn lưu trữ lại email và phoneNumber vào một temp table nào đó. Một vài người sẽ vã thẳng đoạn code lưu trữ này vào từng method (f***), một vài người khác tạo một method mới kiểu dạng như:


public void logging(string something...)

Nhưng rõ ràng cách làm này ẩn chứa nhiều nguy cơ conflict dữ liệu không đáng có. Chúng ta vẫn thường ra rả nói về OOP, trong khi lại thường xuyên vi phạm nghiêm trọng tính encapsulation của đối tượng.

Lượm lặt đâu đó, bạn có thể gặp một vài người sử dụng strategy pattern, bản thân tôi thì thích observer pattern hơn. Tư duy trong lập trình là thứ có thể dễ dàng thay đổi, nhưng nghiệt ngã ở chỗ, thuyết phục được một người thay đổi tư duy lại khó khăn hơn gấp bội.

Tôi đã nhiều lần gặp những lập trình viên phủ định ngay những ý tưởng mới, ngay cả khi họ chưa hiểu rõ ý tưởng đó là gì. Tiếc thay, những lời biện hộ lại có vẻ rất thuyết phục như “tôi cho rằng thiết kế này là phù hợp với chức năng hiện có” hay “các hệ thống đang có đều thiết kế như vậy”. Chúng ta thường vận dụng những tư duy cũ cho một hệ thống mới và hy vọng vào một sự chuyển biến mang chiều hướng tích cực. Nhưng sự thuyết phục để thay đổi là vô cùng khó khăn khi mà ngay cả loose coupling hay high cohesion vẫn còn là những ý niệm hết sức mơ hồ.

Insanity is doing the same thing over and over again, but expecting different results. (lần này thì nhớ tên: Albert Einstein)

Tổng hợp từ các nguồn:

All rights reserved

Tính trừu tượng trong lập trình hướng đối tượng với Java

Hiểu về khái niệm Abtraction bằng VD

Giả sử bạn ước muốn tạo một phần mềm ngân hàng và bạn được yêu cầu thu thập tất cả thông tin về khách hàng của bạn.

Có nhiều năng lực bạn có thể đưa ra thông tin sau đây về khách hàng:

Nhưng mà, không phải tất cả các thông tin trên là bắt buộc để tạo một phần mềm ngân hàng.

Bởi vậy, bạn chỉ phải chọn thông tin hữu ích cho ứng dụng ngân hàng của mình từ nhóm đấy. Dữ liệu như tên, địa chỉ, thông tin thuế, v.v … Có ý nghĩa đối với phần mềm ngân hàng.

Vì chúng ta đã tìm nạp / xóa / chọn thông tin khách hàng từ một nhóm lớn hơn, quy trình này có cách gọi khác là Trừu tượng hóa.

Nhưng, thông tin tương tự sau khi được trích xuất có thể được dùng cho nhiều ứng dụng. Chẳng hạn, bạn sẽ sử dụng cùng một dữ liệu cho phần mềm bệnh viện, ứng dụng cổng thông tin việc làm, cơ sở dữ liệu của Chính phủ, v.v … Với rất ít hoặc không sửa đổi.

Vì lẽ đó, nó trở thành dữ liệu chính của bạn. Đây là một lợi thế của Trừu tượng.

>>> Xem thêm: Các tính chất của OOP [Lập trình hướng đối tượng] mới nhất 2020

53. Tính trừu tượng
53. Tính trừu tượng

Kết

Một điểm lưu ý cuối cùng, đó là tùy vào mỗi ngôn ngữ mà Tính trừu tượng sẽ khác nhau. Khi sử dụng ngôn ngữ nào, bạn phải cần nghiên cứu kỹ về Tính trừu tượng của ngôn ngữ đấy. Hy vọng qua bài viết này, các bạn đã hiểu rõ hơn về Tính trừu tượng trong OOP.

Nhật Minh – Tổng hợp và bổ sung

Nguồn: vn.got-it.ai, niithanoi.edu.vn, levunguyen.com

Tính trừu tượng trong Java là một trong những khái niệm quan trọng trong các tính chất của Java. Tính trừu tượng là thuộc tính mà nhờ đó các chi tiết thiết yếu được hiển thị đến người dùng. Trong bài viết này, chúng ta sẽ cùng tìm hiểu về khái niệm, ý nghĩa và ưu điểm của tính trừu tượng trong ngôn ngữ lập trình Java.

Tính trừu tượng là quá trình ẩn các chi tiết trong quá trình triển khai và chỉ hiển thị chức năng cho người dùng. Nói cách khác, tính trừu tượng trong Java chỉ hiển thị những thông tin thiết yếu cho người dùng và ẩn đi các chi tiết bên trong. Ví dụ như khi bạn nhập văn bản và gửi tin nhắn sms, bạn sẽ chỉ nhìn thấy màn hình nhập văn bản và nhấn gửi đi mà không biết quá trình xử lý nội bộ việc gửi tin nhắn đó như thế nào.

Java là ngôn ngữ lập trình hướng đối tượng (OOP – Object Oriented Programming), chính vì thế mà tính trừu tượng được xem là một trong các tính chất của Java đóng vai trò quan trọng. Tính trừu tượng trong Java được triển khai bằng cách sử dụng các lớp trừu tượng (abstract classes) và giao diện trừu tượng (abstract interfaces).

Lớp trừu tượng và các phương thức trừu tượng có những đặc điểm là:

Trong Java, các thuật toán để triển khai tính trừu tượng như sau:

Là một trong số các tính chất của Java, tính trừu tượng có rất nhiều ưu điểm nổi bật có thể kể ra như:

Để giúp bạn hiểu hơn về tính trừu tượng trong Java, chúng ta hãy cùng xem 2 ví dụ dưới đây.

Ví dụ 1:

// Java program to illustrate the

// concept of Abstraction

abstract class Shape {

String color;

// these are abstract methods

abstract double area();

public abstract String toString();

// abstract class can have the constructor

public Shape(String color)

System.out.println(“Shape constructor called”);

this.color = color;

// this is a concrete method

public String getColor() { return color; }

class Circle extends Shape {

double radius;

public Circle(String color, double radius)

// calling Shape constructor

super(color);

System.out.println(“Circle constructor called”);

this.radius = radius;

@Override double area()

return Math.PI * Math.pow(radius, 2);

@Override public String toString()

return “Circle color is ” + super.getColor()

+ “and area is : ” + area();

class Rectangle extends Shape {

double length;

double width;

public Rectangle(String color, double length,

double width)

// calling Shape constructor

super(color);

System.out.println(“Rectangle constructor called”);

this.length = length;

this.width = width;

@Override double area() { return length * width; }

@Override public String toString()

return “Rectangle color is ” + super.getColor()

+ “and area is : ” + area();

public class Test {

public static void main(String[] args)

Shape s1 = new Circle(“Red”, 2.2);

Shape s2 = new Rectangle(“Yellow”, 2, 4);

System.out.println(s1.toString());

System.out.println(s2.toString());

}Output:Shape constructor called

Circle constructor called

Shape constructor called

Rectangle constructor called

Circle color is Redand area is : 15.205308443374602

Rectangle color is Yellowand area is : 8.0Ví dụ 2:

// Java Program to implement

// Java Abstraction

// Abstract Class declared

abstract class Animal {

private String name;

public Animal(String name) { this.name = name; }

public abstract void makeSound();

public String getName() { return name; }

// Abstracted class

class Dog extends Animal {

public Dog(String name) { super(name); }

public void makeSound()

System.out.println(getName() + ” barks”);

// Abstracted class

class Cat extends Animal {

public Cat(String name) { super(name); }

public void makeSound()

System.out.println(getName() + ” meows”);

// Driver Class

public class AbstractionExample {

// Main Function

public static void main(String[] args)

Animal myDog = new Dog(“Buddy”);

Animal myCat = new Cat(“Fluffy”);

myDog.makeSound();

myCat.makeSound();

}Output:Buddy barks

Fluffy meows

Vậy là chúng ta đã cùng nhau tìm hiểu chi tiết về tính trừu tượng trong Java. Trừu tượng là một kỹ thuật được sử dụng để ẩn những chi tiết không cần thiết với người dùng cuối. Java cung cấp tính trừu tượng thông qua các lớp và giao diện trừu tượng. Trong khi các giao diện cung cấp khả năng trừu tượng 100% thì các lớp trừu tượng cung cấp khả năng trừu tượng một phần. Tùy thuộc vào thông tin nào của ứng dụng sẽ sẽ được hiển thị đến người dùng mà các nhà phát triển sẽ lựa chọn cách phù hợp.

Cảm ơn bạn đã đọc bài viết, nếu bạn đang quan tâm đến học lập trình thì hãy tham khảo ngay các khóa học lập trình dưới đây tại ICANTECH nhé!

Nguồn ảnh: ICANTECH.

Tính trừu tượng (Abstraction) là một trong 4 tính chất đặc trưng quan trọng của các ngôn ngữ lập trình hướng đối tượng (OOP – object-oriented programming). Mục tiêu chính của nó là làm giảm sự phức tạp bằng cách ẩn các chi tiết không liên quan trực tiếp tới người dùng (người dùng ở đây không phải người dùng cuối mà là lập trình viên). Điều đó cho phép người dùng vẫn thực hiện được các công việc cần thiết dựa trên một thực thể trừu tượng được cung cấp mà không cần hiểu hoặc thậm chí không nghĩ về tất cả sự phức tạp ẩn giấu bên trong.

Thực ra từ “trừ tượng” là một khái niệm chung được sử dụng cả trong cuộc sống chứ không phải là thuật ngữ chỉ giới hạn trong lĩnh vực lập trình.

Trừu tượng (Abstraction) trong đời sống thật

Tôi là một “con nghiện” cafe, mỗi buổi sáng đến công ty, sau khi ăn sáng xong là tôi phải làm 1 nháy cafe sữa đá. Để có cốc cafe đó, việc duy nhất tôi cần làm là đến quầy bán cafe và gọi “em ơi, cho a 1 cốc cafe như mọi hôm (nhiều sữa ít đá)“. Khoảng 2~3 phút sau là tôi đã có ngay một cốc cafe trên tay mà méo cần quan tâm nó được làm ra như thế nào, tôi chỉ cần biết tôi gọi 1 cốc cafe, sau đó trả tiền và lấy cafe, chấm hết.

Một ví dụ khác là khi chúng ta gửi một email cho một ai đó, sau khi viết mail xong chúng ta chỉ cần bấm nút “Gửi (Send)” là xong, cái gì thực sự diễn ra sau khi chúng ta gửi, dữ liệu được truyền như thế nào trên network cho đến khi đến được với người nhận thì chúng ta không quan tâm.

Đó là 2 ví dụ về “trừu tượng” trong đời sống thật.

Trừu tượng (Abstraction) trong lập trình hướng đối tượng (OOP)

Trong OOP thì Abstraction có thể chia thành 2 level (2 cảnh giới)

Cảnh giới thứ nhất: Dữ liệu (data) và một số hàm (methods) không cần thiết đưa ra bên ngoài sẽ được đưa vào trong class và chỉ định đặc tả truy cập là private (hoặc protected). Các data hoặc methods đó sẽ không thể truy cập từ bên ngoài của class đó. Ở cảnh giới này trừu tượng giúp cho code dễ hiểu hơn vì nó tập trung vào các tính năng / hành động cốt lõi và không tập trung vào các chi tiết nhỏ nhặt. Ngoài ra nó còn giúp chương trình dễ bảo trì, hạn chế lỗi do truy cập data bừa bãi, sai cách. Ở level này có thể coi Abstraction = Encapsulation + Data Hiding (tìm hiểu thêm tại đây)

Cảnh giới thứ hai: Ở cảnh giới này chúng ta thực hiện trừu tượng hoá từ giai đoạn design cho đến coding. Ở giai đoạn design – thiết kế chúng ta sẽ tập trung vào việc đưa ra “what” – cái mà một module hoặc 1 class sẽ làm chứ không tập trung vào “how” – các việc đó được thực hiện như thế nào. Kết quả của bước thiết kế này sẽ là một cái gọi là interface. Các class (hoặc module) sẽ làm việc với nhau thông qua interface chứ không cần biết cụ thể về nhau.

Một interface là một bản mô tả hành vi hoặc khả năng của một class mà không đưa ra cách thực hiện cụ thể của class đó như thế nào.

Trong C++ thì interface là một class mà chỉ chứa khai báo của hàm huỷ ảo (virtual destructor) và các hàm thuần ảo (poor virtual methods) khác. Ở giai đoạn coding thì các interface sẽ được xây dựng cụ thể bằng các class cụ thể khác, các class này bắt buộc phải kết thừa interface class và định nghĩa cụ thể các hàm thuần ảo đã được khai báo trong interface đó. Bằng cách này thì các module (hoặc class) sẽ không phụ thuộc vào nhau mà chỉ phụ thuộc vào interface, việc sửa code của các module (hoặc class) sẽ không kéo theo việc phải sửa code ở các module (hoặc class) khác.

Ví dụ sơ sơ, đơn giản về interface như sau (chú ý, code chỉ dùng để minh hoạ, muốn chạy được cần code thêm) →

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

class IShape // class này đóng vai trò là interface vì tất cả các hàm của nó đều là hàm thuần ảo

public:

virtual ~IShape();

virtual void move_x(int x) = 0;

virtual void move_y(int y) = 0;

virtual void draw() = 0;

};

class Line : public IShape

public:

virtual ~Line();

virtual void move_x(int x); // class Line sẽ phải có code cụ thể của hàm move_x

virtual void move_y(int y); // class Line sẽ phải có code cụ thể của hàm move_y

virtual void draw(); // class Line sẽ phải có code cụ thể của hàm draw

private:

point end_point_1, end_point_2;

//…

};

int main (void)

IShape* shape = new Line();

// Gọi một số hàm setup cho shape

//…

// Vẽ shape

shape->move_x(10);

shape->move_y(20);

shape->draw();

//…

Trong đoạn code trên thì tôi có comment một số chỗ bằng tiếng Việt để các bạn dễ hiểu nhưng anh em tuyệt đối đừng làm như thế, hãy comment bằng tiếng Anh. Bây giờ tôi sẽ giải thích qua một chút về code ví dụ này. Trong ví dụ trên thì IShape được gọi là interface còn Line là class implement cụ thể interface đó. IShape chỉ đưa ra danh sách các hàm mà một class kế thừa nó cần phải định nghĩa, bản thân class IShape không định nghĩa các hàm đó. Line 28~30 trong hàm main thực hiện vẽ đối tượng trỏ bởi con trỏ shape mà không quan tâm đến đối tượng cụ thể trong đó là đối tượng của class nào, nó chỉ làm việc đó thông qua interface IShape mà không cần biết đến sự tồn tại của Line. Lợi ích của mô hình thiết kế kiểu này là:

  • Giả sử chúng ta muốn thay thế Line bằng Square thì chúng ta cần tạo ra class Square kế thừa IShape, sau đó định nghĩa các hàm move_x(), move_y(), draw() tương ứng. Trong hàm main() thì chỉ sửa lại đoạn code mô phỏng từ line 24 đến 26, line 28~30 không cần sửa lại →

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

class IShape // class này đóng vai trò là interface vì tất cả các hàm của nó đều là hàm thuần ảo

public:

virtual ~IShape();

virtual void move_x(int x) = 0;

virtual void move_y(int y) = 0;

virtual void draw() = 0;

};

class Line : public IShape

public:

virtual ~Line();

virtual void move_x(int x); // class Line sẽ phải có code cụ thể của hàm move_x

virtual void move_y(int y); // class Line sẽ phải có code cụ thể của hàm move_y

virtual void draw(); // class Line sẽ phải có code cụ thể của hàm draw

private:

point end_point_1, end_point_2;

//…

};

class Square : public IShape

public:

virtual ~Square();

virtual void move_x(int x); // class Square sẽ phải có code cụ thể của hàm move_x

virtual void move_y(int y); // class Square sẽ phải có code cụ thể của hàm move_y

virtual void draw(); // class Square sẽ phải có code cụ thể của hàm draw

private:

point end_point_1;

point end_point_2;

point end_point_3;

point end_point_4;

//…

};

int main (void)

IShape* shape = new Square();

// Gọi một số hàm setup cho shape

//…

// Vẽ shape

shape->move_x(10);

shape->move_y(20);

shape->draw();

//…

  • Nếu chương trình được mở rộng ra và có những phần code chỉ phục thuộc vào interface IShape mà không phụ thuộc vào định nghĩa cụ thể như Line, Square thì khi thay đổi code của Line, Square sẽ không cần compile lại các phần code không liên quan.

Nếu anh em nào mới tiếp cận C++ cũng như lập trình hướng đối tượng thì đọc về cảnh giới 2 này sẽ khá khó hiểu. Để hiểu được thì cần phải học qua các bài về lớp trừu tượng (Abstract Class) và tìm hiểu về design pattern như Abstract Factory. Nói chung anh em mới tiếp cận thì cố gắng hiểu Abstraction ở level 1 và ghi nhớ rằng có Abstraction ở level 2 là được rồi. Nói ra thì khá xấu hổ vì lúc mới học và làm C++ mình cũng không hiểu Abstraction nó là cái khỉ gì, trong quá trình làm dần dần mới ngộ ra.

Tham khảo

  • [1] : https://crmbusiness.wordpress.com/2015/08/12/why-understanding-abstractions-helps-you-write-better-code/
  • [2] : https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Interface_Class

Xem thêm

— Phạm Minh Tuấn (Shun) —

Trừu tượng

Xin hãy đóng góp cho bài viết này bằng cách phát triển nó. Nếu bài viết đã được phát triển, hãy gỡ bản mẫu này. Thông tin thêm có thể được tìm thấy tại trang thảo luận.

“Một sự trừu tượng” là kết quả của quá trình tạo ra một khái niệm đóng vai trò như một danh từ siêu thể loại cho tất cả khái niệm bên dưới, và những sự liên kết cùng các khái niệm liên quan như nhóm, trường, hoặc thể loại. Trong nghệ thuật trừu tượng khác với ấn tượng bởi ấn tượng là những sự dễ hiểu còn trừu tượng là bao quát gồm nhiều sự tưởng tượng mà khó có thể hình dung được. Trừu tượng còn được ví như một thứ khó hiểu “quá sức trừu tượng” một sự cầu kỳ nào đó hoặc khó hiểu, khó hình dung vì không có gì cụ thể, có được sự khái quát hoá trong tư duy, trên cơ sở dựa vào các thuộc tính, các quan hệ của sự vật; phân biệt với cụ thể

Tính trừu tượng (abstraction) là một trong bốn tính chất cơ bản của lập trình hướng đối tượng trong Java.

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. Chi tiết các bạn xem thêm ở bài viết: Abstract class và Interface trong Java.

Tổng quan về Tính trừu tượng

Khái niệm

Tính trừu tượng (Abstraction) là một trong bốn tính chất cơ bản của Lập trình hướng đối tượng (Object-oriented programming – viết tắt là OOP). Các tính chất còn lại bao gồm: Tính đóng gói (Encapsulation), Tính kế thừa (Inheritance) và Tính đa hình (Polymorphism).

Hiểu đơn giản, Tính trừu tượng dùng để chỉ quá trình ẩn việc triển khai thực tế của một ứng dụng khỏi người dùng. Thay vào đó, lập trình viên chỉ nhấn mạnh vào cách sử dụng ứng dụng.

Mục đích

Thông qua Tính trừu tượng, lập trình viên có thể ẩn tất cả dữ liệu hoặc quy trình không liên quan của ứng dụng. Đối với người dùng, đó chỉ là những chi tiết không cần thiết. Từ đó, ta có thể để giảm độ phức tạp và tăng hiệu quả sử dụng của phần mềm.

Có thể xem Tính trừu tượng là một phần mở rộng của Tính đóng gói. Bạn có thể tìm hiểu thêm về Tính đóng gói để hiểu rõ hơn về hai thuộc tính này.

Ý nghĩa

Một số lợi ích của Tính trừu tượng có thể kể đến là:

  • Giao diện người dùng đơn giản, cấp cao.
  • Các đoạn mã phức tạp bị ẩn đi.
  • Nâng cao vấn đề bảo mật, bảo vệ dự liệu không bị lộ.
  • Việc bảo trì phần mềm dễ dàng hơn.
  • Việc cập nhật hay thay đổi mã sẽ rất ít khi ảnh hưởng đến Tính trừu tượng.
Java Core - Tính trừu tượng (Abstract)
Java Core – Tính trừu tượng (Abstract)

Sự khác biệt giữa Lớp Abstracts và Giao diện

Lớp Abstracts Giao diện
Một lớp Abstracts có thể có cả phương thức Abstracts và không Abstracts. Giao diện có thể chỉ có các phương thức Abstracts.
Nó không hỗ trợ nhiều thừa kế. Nó hỗ trợ nhiều thừa kế.
Nó có thể cung cấp việc triển khai giao diện. Nó không thể cung cấp việc triển khai lớp Abstracts.
Một lớp Abstracts có thể có các phương thức chung được bảo vệ và Abstracts. Một giao diện chỉ có thể có các phương thức Abstracts công khai.
Một lớp Abstracts có thể có biến cuối cùng, tĩnh hoặc biến cuối cùng tĩnh với bất kỳ mã xác định quyền truy cập nào. Giao diện chỉ có thể có một biến cuối cùng tĩnh công khai.

Sự khác nhau giữa abstract & interface

Bảng dưới đây sẽ giúp các em có cái nhìn rõ hơn về sự không giống nhau giữa abstract và interface. Khi nào thì chúng ta nên dùng abstract hoặc interface cho hợp lý

Các điểm so sánh Abstract Interface
Đa kế thừa Không hỗ trợ đa kế thừa Một class có thể kế thừa nhiều Interface
Default (mặc định) Có thể khái niệm tính chất , và thân phương thức có thể chứa code chỉ chứa hằng số , không có code trong phần thân method
Access Modifier có thể đặt toàn bộ modifier Mọi phương thức và tính chất là public
Mục đích sử dụng IS A (quan hệ cha con) HAS A (Can do, có năng lực làm được việc gì)

Khi nào dùng abstract

  • Khả năng mở rộng không cần xoá hết code làm lại.
  • Tăng tính bảo mật che dấu các dữ liệu quan trọng
  • Khi các lớp có mối liên hệ cha con với nhau Ví dụ như con gà , chó , mèo chúng đều là động vật (Animal)

Khi nào sử dụng interface

  • Mục đích chính của interface là sử dụng cho tính đa hình. năng lực thực hiện các hành động không giống nhau trên các ngữ cảnh không giống nhau.
  • Chúng ta muốn các lớp không liên quan với nhau liên kết lại với nhau. Anh Ví dụ như mình có cách thức thanh toán HSBC , mình có thanh toán Vietcombank . 2 Class này hoàn toàn không liên quan gì với nhau. VD như trong phần mềm của anh. Anh ước muốn hỗ trợ người dùng cả 2 cách thức thanh toán, có nghĩa là nếu họ có tài khoản bên HSBC họ có thể thực hiện giao dịch thanh toán , chuyển khoản bên Vietcombank. Để thực hiện được việc đấy thì 2 class HSBC & Vietcombank phải nói chuyện được với nhau, có nghĩa là 2 class đấy phải có cùng một điểm chung. Thì lúc này anh sẽ tạo ra một Interface là Payment. Sau đó HSBC & Vietcombank cùng implements nó. Như vậy 2 cái đấy sẽ có một điểm chung phải có thể nói chuyện được với nhau.
  • Chúng ta ước muốn chú trọng vào hành động hơn về cấu trúc đối tượng.
  • Chúng ta muốn sử dụng đa thừa kế.
  • Tăng cường tính bảo mật . Người dùng chỉ có thể thấy được method thế nhưng không thấy được nội dung code bên trong
Abstract Class Trong Java quá chi là TRỪU TƯỢNG | Code Thu
Abstract Class Trong Java quá chi là TRỪU TƯỢNG | Code Thu

Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Tính trừu tượng trong lập trình hướng đối tượng với Java dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên like và share để ủng hộ Kteam và tác giả nhé!

Nội dung

Để đọc hiểu bài này, tốt nhất các bạn nên có kiến thức cơ bản về các phần sau:

  • CÁC BIẾN TRONG JAVA.
  • CÁC KIỂU DỮ LIỆU TRONG JAVA.
  • CÁC HẠNG TOÁN TỬ TRONG JAVA
  • CẤU TRÚC RẼ NHÁNH TRONG JAVA
  • VÒNG LẶP WHILE TRONG JAVA
  • VÒNG LẶP FOR TRONG JAVA
  • MẢNG TRONG JAVA
  • VÒNG LẶP FOR-EACH TRONG JAVA
  • VAI TRÒ BREAK, CONTINUE TRONG VÒNG LẶP JAVA
  • SWITCH TRONG JAVA
  • LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
  • CLASS TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
  • CÁC LOẠI PHẠM VI TRUY CẬP TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
  • TỪ KHÓA STATIC TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
  • TỪ KHÓA THIS TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
  • THỪA KẾ TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
  • SETTER & GETTER TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
  • OVERRIDING VÀ OVERLOADING TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Bài này chúng ta sẽ tìm hiểu những vấn đề sau:

  • Tính trừu tượng là gì?
  • Trừu trượng trong lập trình hướng đối tượng là gì?
  • Tính trừu tượng trong Java
Tính TRỪU TƯỢNG trong HỘI HỌA HIỆN ĐẠI | Thuỷ Mẫn | KHOA HỌC
Tính TRỪU TƯỢNG trong HỘI HỌA HIỆN ĐẠI | Thuỷ Mẫn | KHOA HỌC

Tính trừu tượng trong Java

Lớp trừu tượng

Lớp trừu tượng là lớp được khai báo mà không thể tạo ra đối tượng từ lớp đó. Ta sẽ tạo những lớp con kế thừa lớp trừu tượng.

Mục đích lớp trừu tượng là tạo ra lớp chung cho những lớp có liên quan với nhau kế thừa. Ví dụ khi xây dựng phần mềm quản lý nhà trường: Những lớp sinh viên, giảng viên, cán bộ,… có những thuộc tính và phương thức chung như tên, năm sinh, quê quán,… thì ta sẽ tạo một lớp con người là lớp trừu tượng và những đặc điểm chung được để trong lớp con người. Khi phát triển chương trình, ta chỉ có thể tạo các đối tượng từ lớp con kế thừa lớp con người; không thể cho tạo đối tượng từ lớp con người được.

Để tạo lớp trừu tượng ta dùng từ khóa abstract trước từ khóa class. Ta sẽ dùng lớp Person từ những bài trước đó, biến nó thành lớp abstract:


public abstract class Person { public String name; private int age; public float height; public Person(String name, int age, float height) { this.name = name; this.age = age; this.height = height; } public void setAge(int age) { if (age>=0 && age<=100 ) { this.age = age; } } public void setAge(byte age) { if (age>=0 && age<=100 ) { this.age = age; } } public void setAge(short age) { if (age>=0 && age<=100 ) { this.age = age; } } public void setAge(long age) { if (age>=0 && age<=100 ) { this.age = (int) age; } } public int getAge() { return this.age; } public void getInfo() { System.out.println("Name:"+this.name); System.out.println("Age:"+this.age); System.out.println("Height:"+this.height); } }

Khi ta thử khởi tạo đối tượng lớp Person, Eclipse sẽ cảnh báo lỗi:

Ngay cả phương thức Clone ta viết bên trong bài trước cũng cảnh báo (Code phía trên Kteam đã xóa phương thức đó).

Như vậy, chỉ có những lớp kế thừa lớp Person mới có thể sử dụng được.

Phương thức trừu tượng

Các phương thức trừu tượng là là chỉ định nghĩa mà không có chương trình bên trong, lớp con kế thừa phải bắt buộc override nó lại để sử dụng. Phương thức trừu tượng có ý nghĩa định nghĩa phương thức bắt buộc phải có trong lớp con kế thừa.

Ví du: Ta sẽ tạo phương thức trừu tượng clone() trong lớp Person để bắt các lớp con phải override lại.


public class Person { public String name; private int age; public float height; public Person(String name, int age, float height) { this.name = name; this.age = age; this.height = height; } public void setAge(int age) { if (age>=0 && age<=100 ) { this.age = age; } } public void setAge(byte age) { if (age>=0 && age<=100 ) { this.age = age; } } public void setAge(short age) { if (age>=0 && age<=100 ) { this.age = age; } } public void setAge(long age) { if (age>=0 && age<=100 ) { this.age = (int) age; } } public int getAge() { return this.age; } public abstract Object clone(); public void getInfo() { System.out.println("Name:"+this.name); System.out.println("Age:"+this.age); System.out.println("Height:"+this.height); } }

Ở phương thức clone(), ta cho phương thức trả từ khóa Object có nghĩa phương thức sẽ trả kiểu một đối tượng chung nào đó (như Person, Student, Example… ta gọi chung là Object).

Bây giờ tại lớp Student, Eclipse sẽ đưa ra cảnh báo phải override lại phương thức clone()

Ta sẽ override lại như sau:


public class Student extends Person { public String universityName; public Student(String name, int age, float height, String universityName) { super(name, age, height); this.universityName = universityName; } public void getInfo() { super.getInfo(); System.out.println("University Name:"+this.universityName); } @Override public Object clone() { Student other = new Student(this.name, this.getAge(), this.height, this.universityName); return other; } }

Chú ý

Trong dòng code


Student other = new Student(this.name, this.getAge(), this.height, this.universityName);

Vì thuộc tính age ở phạm vi private nên lớp con phải gọi this.getAge() để lấy giá trị. Theo Kteam thì nên cho các thuộc tính lớp trừu tượng ở dạng protected để lớp con kế thừa dễ dàng truy cập.

Tính trừu tượng là gì?

Mặc dù đây là bài viết lập trình, nhưng Kteam sẽ nói qua về ngôn ngữ học, rất nhiều người lập trình lâu năm đôi khi họ không thể hiểu bản chất từ trừu tượng

Trừu tượng là một từ Hán Việt: ‘trừu’ nghĩa là rút ra, ‘tượng’ có nghĩa là hình tượng, tượng trưng. Vậy theo nghĩa bóng, trừu tượng có nghĩa là rút ra một khái niệm từ những hình tượng cụ thể, tạo ra một ý niệm trong suy nghĩ con người.

Tính trừu tượng rất ý nghĩa không những lập trình nói riêng mà trong giáo dục nói chung. Khá bất ngờ tính trừu tượng đã áp dụng từ những học sinh lớp 1 và mẫu giáo. Kteam sẽ lấy ví dụ sau:

Nếu ai còn nhớ, đây chính là que tính được sử dụng khi học toán lớp 1 (Sau này Kteam không rõ giáo dục có sự thay đổi không, có thể đã dạy sớm hơn trong chương trình mẫu giáo). Việc học toán lúc đầu cho các em nhỏ cần phải hiểu về các con số và toán tử, có thể giải thích quy trình như sau:

  • Bước 1: Cho các em nhỏ tập đếm dựa theo que tính để làm quen với con số, để cho tụi nhỏ hiểu ý nghĩa các con số như số 1 là một cái, số 2 là hai cái,…
  • Bước 2: Khi làm quen được các con số, các thầy cô sẽ dạy cách tính toán: thường các cô để 5 cái bên trái, 5 cái bên phải và hỏi tổng là bao nhiều. Các bạn đừng có nghĩ đa số tụi nhó sẽ biết 5+5=10 (tùy theo khả năng mỗi đứa). Chúng sẽ đếm bên trái xong rồi đếm bên phải, dần dần trong đầu sẽ trừu tượng ra phép cộng. Rồi thầy cô thử lấy ra một vài que tính, tụi nhóc cũng phải tập đếm lại và cũng trừu tượng ra phép trừ…

Như vậy, việc giáo dục toán que tính đang tạo trừu tượng toán học cho học sinh, dần dần các khái niệm trừu trượng của toán học cao hơn sẽ được dạy dần như nhân chia, lũy thừa, căn bậc, đạo hàm,… Thì tính trừu tượng toán càng cao, học toán càng giỏi. Nếu thời học sinh bạn sẽ thấy: đứa giỏi toán khi nhìn công thức nó sẽ ngồi ngẫm phân tích trong đầu rồi mới thử giải, có những đứa gặp công thức thì giải theo cách này đến cách khác mà chưa phân tích trước thì bản chất là đang thử sai và dựa vào may mắn, đứa yếu hơn thì nhìn công thức chỉ thấy rối đầu.

Ngay trong lập trình cũng vậy: Đứa giỏi lập trình thì khi có vấn đề thì sẽ ngồi ngẫm phân tích để đưa ra ý tưởng trước khi code, còn đứa không giỏi thì cứ nhảy vào code trong khi chưa rõ lý do rồi sau đó nghĩ mình đang viết cái gì.

Java 44. Lớp và phương thức trừu tượng Abstract trong Java | Phần 2 - Lập trình Hướng Đối Tượng
Java 44. Lớp và phương thức trừu tượng Abstract trong Java | Phần 2 – Lập trình Hướng Đối Tượng

Sự khác biệt giữa Abstracts và package

Abstracts package
Tính Abstracts trong Lập trình hướng đối tượng giải quyết các vấn đề ở cấp độ thiết kế. Việc package giải quyết nó ở mức độ thực thi.
Tính Abstracts trong Lập trình là về việc che giấu các chi tiết không mong muốn trong khi hiển thị hầu hết các thông tin cần thiết. package có nghĩa là liên kết mã và dữ liệu thành một đơn vị duy nhất.
Tính Abstracts hóa dữ liệu trong Java cho phép tập trung vào những gì đối tượng thông tin phải chứa package có nghĩa là ẩn các chi tiết hoặc cơ chế bên trong về cách một đối tượng thực hiện điều gì đó vì lý do bảo mật.

Tổng quan về Tính trừu tượng trong OOP

Khái niệm

Tính trừu tượng (Abstraction) là một trong bốn thuộc tính cơ bản của Lập trình hướng đối tượng (Object-oriented programming – viết tắt là OOP). Các tính chất còn lại bao gồm: Tính đóng gói (Encapsulation), Tính kế thừa (Inheritance) và Tính đa hình (Polymorphism).

Hiểu dễ dàng, Tính trừu tượng dùng để chỉ quá trình ẩn việc khai triển thực tế của một phần mềm khỏi người sử dụng. Thay vào đó, lập trình viên chỉ nhấn mạnh vào cách dùng phần mềm.

Mục đích

Thông qua Tính trừu tượng, lập trình viên có thể ẩn tất cả dữ liệu hoặc quy trình không liên quan của phần mềm. Đối với người dùng, đấy chỉ là những chi tiết không cần thiết. Từ đó, ta có thể để giảm độ phức tạp & tăng hiệu quả dùng của ứng dụng.

Có thể xem Tính trừu tượng là một phần mở rộng của Tính đóng gói. Bạn có thể tìm hiểu thêm về Tính đóng gói để hiểu hơn về hai thuộc tính này.

Tính trừu tượng trong OOP sử dụng để ẩn những chi tiết không quan trọng của phần mềm khỏi người dùng (Nguồn: Unsplash)

>>> Xem thêm: Lập trình viên có khó không và những điều cần biết

Ý nghĩa

Một vài ích lợi của Tính trừu tượng có thể kể đến là:

  • Giao diện người sử dụng đơn giản, cấp cao.
  • Các đoạn mã phức tạp bị ẩn đi.
  • Nâng cao vấn đề bảo mật, bảo vệ dự liệu không bị lộ.
  • Việc bảo trì ứng dụng đơn giản hơn.
  • Việc cập nhật hay thay đổi mã sẽ gần như không có khi ảnh hưởng đến Tính trừu tượng.
Trừu tượng là gì (Lập trình hướng đối tượng C++)
Trừu tượng là gì (Lập trình hướng đối tượng C++)

Khi nào sử dụng các phương thức Abstracts và lớp Abstracts?

Các phương thức Abstracts chủ yếu được khai báo trong đó hai hoặc nhiều lớp con cũng đang làm điều tương tự theo những cách khác nhau thông qua các triển khai khác nhau. Nó cũng mở rộng cùng một lớp Abstract và cung cấp các triển khai khác nhau của các phương thức Abstracts.

Các lớp Abstracts giúp mô tả các kiểu hành vi chung và hệ thống phân cấp lớp lập trình hướng đối tượng. Nó cũng mô tả các lớp con để cung cấp các chi tiết triển khai của lớp Abstracts.

Bản tóm tắt:

  • Abstracts hóa trong Lập trình là quá trình lựa chọn các tập dữ liệu quan trọng cho một Đối tượng trong phần mềm của bạn và loại bỏ những tập hợp không quan trọng.
  • Khi bạn đã mô hình hóa đối tượng của mình bằng cách sử dụng Tính Abstracts hóa dữ liệu trong Java, cùng một bộ dữ liệu có thể được sử dụng trong các ứng dụng khác nhau.
  • Tham khảo thêm thông tin về khóa học lập trình Java tại T3H ngay hôm nay:https://t3h.com.vn/

Tính trừu tượng trong OOP là một định nghĩa quan trọng mặc dù vậy nhiều người vẫn thường hiểu sai về nó. Bài content sau sẽ trình cho bạn một số thông tin bạn nên biết về tính chất này.

Tính trừu tượng trong lập trình hướng đối tượng là gì?

Tính trừu tượng trong lập trình hướng đối tượng là chỉ nêu ra vấn đề mà không hiển thị cụ thể, chỉ hiện thị tính năng thiết yếu đối với đối tượng người dùng mà không nói quy trình hoạt động. Ví dụ: như tạo ra tính năng gửi tin nhắn, ta chỉ cần hiểu là người dùng viết tin rồi nhấn gửi đi. Còn quy trình xử lý tin nhắn gửi như thế nào thì ta chưa đề cập đến.

Như vậy, tính trừu tượng là che giấu thông tin thực hiện từ người dùng, họ chỉ biết tính năng được cung cấp: Chỉ biết thông tin đối tượng thay vì cách nó sử dụng như thế nào. Nó có những ưu điểm sau:

  • Cho phép lập trình viên bỏ qua những phức tạp trong đối tượng mà chỉ đưa ra những khái niệm phương thức và thuộc tính cần thiết. Ta sẽ dựa những khái niệm đó để viết ra, nâng cấp và bảo trì.
  • Nó giúp ta tập trung cái cốt lõi đối tượng. Giúp người dùng không quên bản chất đối tượng đó làm gì.
Bài 12: Tính trừu tượng trong Java
Bài 12: Tính trừu tượng trong Java

Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Nội dung bài viết

Khóa học

Lập trình Java cơ bản đến hướng đối tượng

Với mục đích giới thiệu đến mọi người về Ngôn ngữ Java – một ngôn ngữ lập trình khá mới mẻ so với C, C++, Java, PHP ở Việt Nam.

Thông qua khóa học LẬP TRÌNH JAVA CƠ BẢN ĐẾN HƯỚNG ĐỐI TƯỢNG, Kteam sẽ hướng dẫn các bạn kiến thức cơ bản của Java. Để từ đó, có được nền tảng cho phép bạn tiếp tục tìm hiểu những kiến thức tuyệt vời khác của Java hoặc là một ngôn ngữ khác.

Cụ thể trong khóa học này, Kteam sẽ giới thiệu với các bạn Java ở phiên bản Java 8

Đánh giá

Bình luận

em xem code trên mạng có từ khóa super trong lúc override nghĩa là sao ạ

Tính trừu tượng trong OOP là một khái niệm quan trọng nhưng nhiều người vẫn thường hiểu sai về nó. Bài viết sau sẽ trình cho bạn một số thông tin bạn nên biết về tính chất này.

Mục lục

Keywords searched by users: tính trừu tượng là gì

Phỏng Vấn: Tính Trừu Tượng Và Biểu Hiện Của Nó? - Youtube
Phỏng Vấn: Tính Trừu Tượng Và Biểu Hiện Của Nó? – Youtube
Tính Trừu Tượng Trong Lập Trình Hướng Đối Tượng (Oop)
Tính Trừu Tượng Trong Lập Trình Hướng Đối Tượng (Oop)
Ví Dụ Về Abtraction (Trừu Tượng) Trong Lập Trình Hướng Đối Tượng
Ví Dụ Về Abtraction (Trừu Tượng) Trong Lập Trình Hướng Đối Tượng
Trừu Tượng Hóa Dữ Liệu – Đối Tượng Trong Thế Giới Thực Và Trong Lập Trình –  Blog Tâm Sự Về Lập Trình Với Mỹ Vân Msita
Trừu Tượng Hóa Dữ Liệu – Đối Tượng Trong Thế Giới Thực Và Trong Lập Trình – Blog Tâm Sự Về Lập Trình Với Mỹ Vân Msita
Ví Dụ Về Abtraction (Trừu Tượng) Trong Lập Trình Hướng Đối Tượng
Ví Dụ Về Abtraction (Trừu Tượng) Trong Lập Trình Hướng Đối Tượng
Tính Trừu Tượng (Abstraction) Trong Java - Gp Coder (Lập Trình Java)
Tính Trừu Tượng (Abstraction) Trong Java – Gp Coder (Lập Trình Java)
Trừu Tượng Hóa Dữ Liệu – Đối Tượng Trong Thế Giới Thực Và Trong Lập Trình –  Blog Tâm Sự Về Lập Trình Với Mỹ Vân Msita
Trừu Tượng Hóa Dữ Liệu – Đối Tượng Trong Thế Giới Thực Và Trong Lập Trình – Blog Tâm Sự Về Lập Trình Với Mỹ Vân Msita
53. Tính Trừu Tượng - Youtube
53. Tính Trừu Tượng – Youtube
Trường Phái Trừu Tượng Là Gì? Những Điều Cơ Bản Cần Biết – Thế Giới Hội Họa
Trường Phái Trừu Tượng Là Gì? Những Điều Cơ Bản Cần Biết – Thế Giới Hội Họa
Tính Trừu Tượng (Abstraction) Trong Java - Freetuts
Tính Trừu Tượng (Abstraction) Trong Java – Freetuts
Nắm Vững Kiến Thức Tính Trừu Tượng Trong Java Chỉ Trong 10 Phút
Nắm Vững Kiến Thức Tính Trừu Tượng Trong Java Chỉ Trong 10 Phút
Code Learn
Code Learn
Danh Từ Trừu Tượng (Abstract Noun): Nhận Biết, Phân Loại, Bài Tập
Danh Từ Trừu Tượng (Abstract Noun): Nhận Biết, Phân Loại, Bài Tập
Tính Trừu Tượng Trong Oop Là Gì ? Khác Gì Với Interface
Tính Trừu Tượng Trong Oop Là Gì ? Khác Gì Với Interface
Java Core - Tính Trừu Tượng (Abstract) - Youtube
Java Core – Tính Trừu Tượng (Abstract) – Youtube
Tính Trừu Tượng Trong Lập Trình Hướng Đối Tượng Với Java | How Kteam
Tính Trừu Tượng Trong Lập Trình Hướng Đối Tượng Với Java | How Kteam
Tìm Hiểu Khái Niệm Tư Duy Trừu Tượng Cùng Nlp Việt Nam
Tìm Hiểu Khái Niệm Tư Duy Trừu Tượng Cùng Nlp Việt Nam
Mách Mẹ Bí Kíp Rèn Luyện Tư Duy Trừu Tượng Cho Con
Mách Mẹ Bí Kíp Rèn Luyện Tư Duy Trừu Tượng Cho Con
Abstract Class Là Gì? Công Cụ Để Đạt Được Abstraction - Blog | Got It  Vietnam
Abstract Class Là Gì? Công Cụ Để Đạt Được Abstraction – Blog | Got It Vietnam
Tính Trừu Tượng Trong Lập Trình Hướng Đối Tượng Với Java | How Kteam
Tính Trừu Tượng Trong Lập Trình Hướng Đối Tượng Với Java | How Kteam
Tranh Trừu Tượng Là Gì? Các Tấm Tranh Trừu Tượng Từng Đi Vào Lịch Sử
Tranh Trừu Tượng Là Gì? Các Tấm Tranh Trừu Tượng Từng Đi Vào Lịch Sử
Tranh Trừu Tượng Hiện Đại Là Gì? Ý Nghĩa Nghệ Thuật Trừu Tượng
Tranh Trừu Tượng Hiện Đại Là Gì? Ý Nghĩa Nghệ Thuật Trừu Tượng
Lao Động Cụ Thể (Concrete Labour) Và Lao Động Trừu Tượng (Abstract Labour) Là  Gì?
Lao Động Cụ Thể (Concrete Labour) Và Lao Động Trừu Tượng (Abstract Labour) Là Gì?
Nghệ Thuật Trừu Tượng – Wikipedia Tiếng Việt
Nghệ Thuật Trừu Tượng – Wikipedia Tiếng Việt
Chủ Nghĩa Biểu Hiện Trừu Tượng Là Gì? (Abstract Expressionism)
Chủ Nghĩa Biểu Hiện Trừu Tượng Là Gì? (Abstract Expressionism)
Tính Trừu Tượng Trong Lập Trình Hướng Đối Tượng (Oop)
Tính Trừu Tượng Trong Lập Trình Hướng Đối Tượng (Oop)
Nghệ Thuật: Tranh Trừu Tượng – Seameo Retrac Summer Fun
Nghệ Thuật: Tranh Trừu Tượng – Seameo Retrac Summer Fun
Tranh Trừu Tượng Hiện Đại Là Gì? Ý Nghĩa Nghệ Thuật Trừu Tượng
Tranh Trừu Tượng Hiện Đại Là Gì? Ý Nghĩa Nghệ Thuật Trừu Tượng
Quan Niệm Về Tư Duy Trừu Tượng? Các Hình Thức Tư Duy Trừu Tượng?
Quan Niệm Về Tư Duy Trừu Tượng? Các Hình Thức Tư Duy Trừu Tượng?

See more here: kientrucannam.vn

Leave a Reply

Your email address will not be published. Required fields are marked *