01/10/2018, 16:04

Định nghĩa về tính trừu tượng trong oop?

Em không hiểu về tính trừu tượng của oop. Các anh cho em 1 định nghĩa chuẩn về nó với. Em tìm trên google và đọc thì chưa hiểu rõ lắm và cũng không biết có đúng không???

Chien Dang viết 18:13 ngày 01/10/2018

Bạn dùng ngôn ngữ nào? Để mình minh họa cho dễ hiểu, chứ định nghĩa thì tra google mới có định nghĩa chuẩn (cho từng ngôn ngữ) được

minh viết 18:19 ngày 01/10/2018

Em dùng php. Anh cũng có thể dùng java ạ. và anh cho em cái định nghĩa gọi là khá chuẩn đc không ạ

Em dùng php. Anh cũng có thể dùng java ạ. và anh cho em cái định nghĩa gọi là khá chuẩn đc không ạ

Nguyen Ca viết 18:14 ngày 01/10/2018

Trừu tượng có nghĩ là tổng quát hóa một cái gì đó lên. không cần chú ý chi tiết bên trong. nó giống như qui nạp trong văn học ấy -.-
Nó không màng đến chi tiết bên trong là gì và người ta vẫn hiểu nó mỗi khi nghe về nó.

Một loại vật liệu để ghi nhớ, phân tích, khái quát, sắp xếp tranh luận và giải thích. Những thông tin mà được minh họa, 
hoặc không minh họa được đóng cứng hoặc bìa mềm, hay không được bọc với lời mở đầu, giới thiệu nội dung, mục lục để khai sáng, giúp hiểu rõ, giáo dục tư duy của con người thông qua thị giác, 
đôi khi là xúc giác ...

Ở trên đang nói đến sách đấy. Trong lập trình thì nó nói đến hành vi nhiều hơn.

minh viết 18:18 ngày 01/10/2018

vậy liệu biểu hiện của tính trừu tượng trong oop là gì ạ. Anh cho em xin 1 ví dụ được không?

Chien Dang viết 18:14 ngày 01/10/2018

Java thì ok, mình từng có 1 bài viết trên blog, bạn xem thử xem sao nhé:
https://colourguy.wordpress.com/2018/05/19/tinh-truu-tuong-trong-lap-trinh-huong-doi-tuong/

Đó là giải thích một cách kĩ lưỡng, còn nói đơn giản có thể hiểu như bạn @nguyenhuuca, ví dụ khá vui

HelloWorld viết 18:19 ngày 01/10/2018

Lập trình hướng đối tượng có 2 đặc trưng và 4 tính chất, bất cứ ngôn ngữ nào được thiết kế để lập trình oop thì đều có các khái niệm trên, nên không cần phân biệt ngôn ngữ, nghĩa là k phụ thuộc vào ngôn ngữ, chỉ cần nắm được tư tưởng bên trong, ngôn ngữ chỉ là công cụ

Abstraction (tính trừu tượng hóa): đơn giản là chọn ra các thuộc tính, phương thức của đối tượng cần cho việc giải quyết bài toán đang lập trình. Vì 1 đối tượng có rất nhiều thuộc tính phương thức, nhưng với bài toán cụ thể không nhất thiết phải chọn tất cả
Ví dụ
Tại sao bài toán quản lý sinh viên lại cần

  • họ tên
  • ngày sinh
  • giới tính
  • điểm thi

mà lại không cần

  • màu tóc
  • sở thích
  • chiều cao

Tại vì nó không cần thiết
Hiểu đơn giản vậy thôi, chứ mấy cuốn sách về công nghệ phần mềm cứ viết đúng nghĩa theo kiểu trừU tượng hóa lên, viết là 1 chuyện, nhưng khi làm lại là 1 chuyện, càng đơn giản, càng dễ hiêu thì càng hiệu quả

HelloWorld viết 18:08 ngày 01/10/2018

Chính là bước mà bạn chọn ra thuộc tính và phương thức để thực hiện tính chất che dấu thông tin, đóng gói dữ liệu vào class.
Các tính chất có mối liên hệ với nhau

Hai đặc trưng của lập trình hướng đối tượng

  • Đặc trưng sử dụng lại, tái sử dụng mã nguồn (source reusability) thể hiện qua cơ chế kế thừa
  • Đặc trưng che dấu thông tin (data hidding) thể hiện qua định nghĩa class
    Bốn tính chất của lập trình hướng đối tượng
  • Abstraction (tính trừu tượng hóa): chọn ra các thuộc tính, phương thức của đối tượng cần cho việc giải quyết bài toán đang lập trình
  • Encapsulation (tính đóng gói): các thuộc tính và phương thức của đối tượng cần cho việc giải quyết bài toán đã được chọn ra sẽ được đóng gói vào 1 kiểu dữ liệu gọi là class. Nhằm che dấu thông tin khỏi các đối tượng bên ngoài, thuộc tính nào thì phương thức nấy
  • Inheritance (tính kế thừa): 1 lớp có thể định nghĩa dựa vào 1 lớp khác, thừa kế lại thuộc tính và phương của lớp khác, tận dụng được mã nguồn, không phải định nghĩ lặp lại, tái sử dụng mã nguồn 1 cách tối ưu. Class a kế thừa class b thì a là lớp dẫn xuất (lớp con, subclass), b là lớp cơ sở (base class, lớp cha, super class). Một số loại kế loại kế thừa thường gặp: đơn kế thừa, đa kế thừa, kế thừa đa cấp, kế thừa thứ bậc
  • Polymorphism (tính đa hình): Lớp dẫn xuất kế thừa lớp cơ sở thì ở lớp dẫn xuất phương thức có thể được viết lại thực hiện các hành động riêng cho phù hợp với lớp dẫn xuất
HelloWorld viết 18:04 ngày 01/10/2018

Bạn dùng ngôn ngữ nào? Để mình minh họa cho dễ hiểu, chứ định nghĩa thì tra google mới có định nghĩa chuẩn (cho từng ngôn ngữ) được

Mình không hiểu ý bạn?
Ngôn ngữ nào cũng giống nhau cả, đã là oop thì đều có các tính chất và đặc trưng của oop, chỉ có cú pháp của nó , hoặc cách hoạt động của ngôn ngữ khác nhau

Chien Dang viết 18:05 ngày 01/10/2018

Người hỏi là newbie, chỉ nói lý thuyết thì sẽ khó hiểu, bạn ấy cũng tự nhận là đọc rồi mà chưa hiểu lắm, nên mình muốn hỏi bạn ấy gần gũi với ngôn ngữ nào nhất thì mình sẽ có minh họa cho ngôn ngữ đó, và mình có đưa vào bài viết đó.

minh viết 18:12 ngày 01/10/2018

sau 1 hồi đọc thì em chốt vấn đề thế này đã ổn chưa các huynh đài: tính trừu tượng là tính chất mà ta nhắm đến phần cốt lõi, những gì khái quát nhất của 1 đối tượng để giải quyết bài toán. Em hiểu như vậy đã đúng chưa ạ. Rất mong nhận được sự giúp đỡ của các anh ạ.

Nguyen Ca viết 18:05 ngày 01/10/2018

Đúng rồi đó, ví dụ chạy xe ôtô có hành động nhấn ga để tăng tốc. thì cái chức năng tăng ga là đại diện cho abstraction, người dùng chỉ cần biết đạp cần là xe tăng tốc, không cần biết bên trong nó làm thế nào. -.-

minh viết 18:17 ngày 01/10/2018

anh ơi anh có thể nói rõ ví dụ đó đc không ạ. Em vẫn chưa hiểu ví dụ của anh thì tính trừu tượng ở đâu. sr anh vì em hỏi nhiều và ngu . ở định nghĩa trên em vừa nêu thì ý là mình tập trung xây dựng 1 class cốt lõi để cho các lớp con của nó kế thừa và thực hiện theo cách riêng của chúng. Nhưng em chưa hiểu ví dụ của anh là như nào anh giúp em ạ @nguyenhuuca

Nguyen Ca viết 18:07 ngày 01/10/2018

ở định nghĩa trên em vừa nêu thì ý là mình tập trung xây dựng 1 class cốt lõi để cho các lớp con của nó kế thừa và thực hiện theo cách riêng của chúng

Em đang tập trung vào cách làm rồi, anh đang tập trung vào định nghĩa
Đọc đây đi

dzone.com

OOP Concept for Beginners: What Is Abstraction? - DZone Java

This primer for the core OOP concept abstraction tackles its basics in both programming and real life as well as tips for implementing it in your code.

Ví dụ này thể hiện tính bao đóng mà

Abstraction đấy

Nguyen Ca viết 18:07 ngày 01/10/2018

Thì đúng vậy OOP cần abstraction, chứ abstraction thì nó ở đâu chẳng được. cơ mà người ta so sánh OOP với functional program, procedural-oriented chứ so sánh với C làm gì bác -.-

minh viết 18:11 ngày 01/10/2018

vậy nhân tiện về tính đóng gói em hiểu như này đã gọi là chuẩn chưa ạ các anh: Tính đóng gói (encapsulation) “đóng gói” thuộc tính và phương thức của đối tượng (hoặc lớp) thông qua việc giới hạn quyền truy cập (hoặc thay đổi) giá trị của thuộc tính hoặc quyền gọi phương thức. Nói cách khác tính đóng gói cho phép kiểm soát quyền truy cập (và thay đổi) giá trị của thuộc tính hoặc quyền gọi phương thức của đối tượng (hoặc lớp) và đối tượng (hoặc lớp) con.

Văn Dương viết 18:07 ngày 01/10/2018

Những dòng code, nó được viết, được thiết kế để khi nhìn vào đó ta thấy như một thế giới sống. Những object, như những cá thể muôn loài được sinh ra (khởi tạo), chết đi (thu hồi) và tương tác với nhau. Nó “trừu tượng” như vậy.

Những con chó con, mèo con sinh ra, nó mang màu lông giống bố mẹ, hoặc ông bà chúng. Chúng cũng có bản năng săn mồi như cha mẹ chúng. Bởi vì nó được “kế thừa” những cái đó.

Con chó thì sủa gâu gâu, con mèo thì meo meo, con gà cục tác lá chanh. Mặc dù thì chúng đều là động vật cả. Mỗi con mang một hình thái, “đa hình” là như thế thôi.

Con chó kiếm được cục xương, nó đem về nuôi con nó. Ai động vào cục xương của nó xem. Nó cắn bỏ m* Cục xương ấy là tài sản riêng của nó. Chỉ nó mới được xài hoặc con nó- những con chó kế thừa nó mới được xài thôi. Bao đóng hay đóng gói nó là như vậy thôi.

Bài liên quan
0