Tính Trừu Tượng (abstraction) Là Gì? - Programming - Dạy Nhau Học Trang chủ » Khái Niệm Abstraction » Tính Trừu Tượng (abstraction) Là Gì? - Programming - Dạy Nhau Học Có thể bạn quan tâm Khái Niệm Access Khái Niệm Acid Khái Niệm Acid Amin Khái Niệm Acid Base Khái Niệm Acid Base Theo Thuyết Bronsted Tính trừu tượng (abstraction) là gì? programming oop LongNguyen209 (Long Nguyen) March 13, 2019, 4:37pm #1 Câu hỏi này em đã search và tìm ra các câu trả lời nhưng vẫn chưa hiểu rõ lắm. Theo như cách hiểu của em thì abstraction là một tính chất của lập trình oop giúp tạo ra các phương thức thuộc tính mà nhiều class đều dùng chung. Thông qua việc sử dụng abstract hoặc interface. Cách hiểu này đúng không mọi người. rogp10 (rogp10) March 13, 2019, 5:06pm #2 Không phải. Trừu tượng hóa nghĩa là chỉ phơi bày các đặc trưng cần thiết của đối tượng. 2 Likes kisuluoibieng (Tên Gì Cũng Được) March 13, 2019, 4:38pm #3 giúp tạo ra các phương thức thuộc tính mà nhiều class đều dùng chung không đúng (hoặc có thể bạn diễn đạt sai ý bạn hiểu) abstract, interface mô tả phương thức, thuộc tính mà những class được extends hoặc implements từ abstract, interface đó sẽ phải hiện thực những cái mô tả đó Ví dụ abstract class DongVat có method di_chuyen (nhưng nó ko có tả là di chuyển thế nào) class Chim extends DongVat Phải hiện thực hàm di chuyển đó di_chuyen() { // bay } class Ca extends DongVat Phải hiện thực hàm di chuyển đó di_chuyen() { // boi } class Khi extends DongVat Phải hiện thực hàm di chuyển đó di_chuyen() { // leo } đại khái là sẽ có những mô tả mà ko nói cụ thể là cái đó nó xử lí như thế nào phải hiện thực cho từng class 1 Like Huy_Nguyen1 (Huy Nguyễn) March 13, 2019, 4:28pm #4 Như này thì mình thấy giống polymorphsm chứ nhỉ 3 Likes kisuluoibieng (Tên Gì Cũng Được) March 13, 2019, 4:33pm #5 Đúng là nhầm thiệt trừu tượng là chỉ biết phương thức đó dùng để làm gì thôi, không biết chi tiết là nó xử lý thế nào mới đúng :)) “abstraction là một tính chất của lập trình oop giúp tạo ra các phương thức thuộc tính mà nhiều class đều dùng chung” đọc xong câu hỏi nhầm qua đa hình luôn :)) 1 Like Huy_Nguyen1 (Huy Nguyễn) March 13, 2019, 4:46pm #6 Mình nghĩ là bạn hiểu. Theo mình thì abstraction là sự lược bỏ chi tiết, giữ lại những đặc điểm chung của 1 nhóm đối tượng. 1 Like MeigyokuThmn (明玉) March 13, 2019, 4:52pm #7 Trích từ điển Hán Việt: “chỉ hoạt động tư tưởng, từ những sự vật riêng biệt, phân tích rút ra những điểm chung và tổng hợp thành khái niệm.” Ví dụ: function printTenTimes(str) { for (let i = 0; i < 10; i++) console.log(str); } function printFiveTimes(str) { for (let i = 0; i < 5; i++) console.log(str); } printTenTimes(str); printFiveTimes(str); Cái chung ở đây là gì, là đều chạy vòng lặp n lần nào đó để in ra str; Vậy chúng ta “trừu tượng” nó: function printNTimes(str, n) { for (let i = 0; i < n; i++) console.log(str); } printNTimes(str, 10); printNTimes(str, 5); Ví dụ OOP (mình biết trong C++ đã có mấy api/class đọc file, thực chất mấy api đó là mẫu mực cho abstraction): void readFileA() { auto fp = fopen("A.txt", "r"); while((ch = fgetc(fp)) != EOF) printf("%c", ch); fclose(fp); } void readFileB() { auto fp = fopen("B.txt", "r"); while((ch = fgetc(fp)) != EOF) printf("%c", ch); fclose(fp); } int main() { readFileA(); readFileB(); return 0; } Trùng lặp khá nhiều (don’t repeat yourself), cần “trừu tượng hóa”: class Reader { private: FILE fp; public: Reader(char* fileName) { this->fp = fopen(fileName, "r"); } ~Reader() { fclose(this->fp); } void printAll() { while((ch = fgetc(this->fp)) != EOF) printf("%c", ch); } } void readFileA() { auto reader = Reader("A.txt"); reader.printAll(); } void readFileB() { auto reader = Reader("B.txt"); reader.printAll(); } int main() { readFileA(); readFileB(); return 0; } Có thể thấy không chỉ riêng gì oop mới có abstraction. Cá nhân mình nhận định: abstraction và encapsulation có nhiều điểm chung và điểm riêng, và trong phần lớn trường hợp thì luôn luôn có nhau. 2 Likes rogp10 (rogp10) March 13, 2019, 5:01pm #8 Đây là tổng quát/chuyên biệt hóa 2 Likes MeigyokuThmn (明玉) March 13, 2019, 5:01pm #9 Cũng chẳng khác gì việc viết interface/abstract chung cho nhiều class đâu 2 Likes noz1995 (Trần Hoàn) March 13, 2019, 5:03pm #10 Vì OOP là một khái niệm “thô sơ” nên ứng dụng cũng rất rộng rãi và đa dạng. Mỗi lập trình viên và người thiết kế hệ thống đều mang trong mình những kinh nghiệm khác nhau, và cách suy nghĩ về các tính chất của OOP của mỗi người đều bị ảnh hưởng bởi nhiều yếu tố. Các tính chất kế thừa, trừu tượng, đa hình, che giấu thông tin… là do người ta đúc kết ra trong quá trình làm việc với OOP chứ không hẳn là định nghĩa, để có một khái niệm tuyệt đối e là khó khăn. Ngôn ngữ đầu tiên sử dụng OOP làm chủ đạo là C++ cũng thể hiện các tính chất đó rất mơ hồ. 4 Likes Hỏi về 2 đặc tính của OOP rogp10 (rogp10) March 13, 2019, 5:08pm #11 “Abstraction” này dịch chuẩn nhất là “trừu tượng hóa”. https://toc.123doc.org/document/847220-c-truu-tuong-hoa-va-khai-quat-hoa.htm 1 Like LongNguyen209 (Long Nguyen) March 14, 2019, 12:09am #12 Hiêu rồi. Thank mọi người. Trừu tượng là ẩn đi các chi tiết triển khai và chỉ thể hiện ra tính năng người dùng. Thông qua việc sử dụng interface hay abstract class. Chỉ khai báo phương thức nhưng ẩn đi chi tiết cách thực hiện và đến lớp con mới triển khai ptgiang56 (Giang Phan) March 14, 2019, 4:20pm #13 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 ta sử dụng abstract class và abstract interface để có tính trừu tượng. Chi tiết bạn xem thêm: Tính trừu tượng (Abstraction) và ví dụ 4 tính chất của lập trình hướng đối tượng trong Java. rogp10 (rogp10) April 5, 2020, 4:44am #14 MeigyokuThmn: Trích từ điển Hán Việt: “chỉ hoạt động tư tưởng, từ những sự vật riêng biệt, phân tích rút ra những điểm chung và tổng hợp thành khái niệm .” Trong này có cả khái quát hóa rồi https://web.archive.org/web/20071214085409/http://www.itmweb.com/essay550.htm LongNguyen209: Thông qua việc sử dụng interface hay abstract class. Abstract class là khái quát hóa chứ. 1 Like DayNhauHoc's Discord Học C++ Free? Click Blog Dạy Nhau Học Tự Học Lập Trình 83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao? Từ khóa » Khái Niệm Abstraction Tính Trừu Tượng Và Tư Duy Trong Lập Trình OOP - Viblo Tính Trừu Tượng Trong OOP Và Các Loại Trừu Tượng Bạn Cần Biết Ví Dụ Về Abtraction (Trừu Tượng) Trong Lập Trình Hướng Đối Tượng Định Nghĩa Abstraction Là Gì? "Abstraction" Nghĩa Là Gì: Định Nghĩa, Ví Dụ Trong Tiếng Anh Trừu Tượng (công Nghệ Phần Mềm) – Wikipedia Tiếng Việt Abstraction Là Gì? Đây Là Một Thuật Ngữ Kỹ Thuật Và Công Nghệ Định Nghĩa Về Tính Trừu Tượng Là Gì ? Tính Trừu Tượng Là Gì Abstraction Là Gì - MotTech 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 (Abstraction) Trong OOP | CppDeveloper Tính Trừu Tượng (Abstraction) Trong Java - Freetuts Abstraction Lập Trình Hướng đối Tượng Phần 5 Tính Trừu Tượng (Abstraction)