Trang 1 / 2 12 LastLast
Hiển thị kết quả từ 1 đến 10 / 11

Chủ đề: OOP 2 : Class/Object

  1. #1
    Tham gia
    13-08-2002
    Bài viết
    762
    Like
    0
    Thanked 3 Times in 3 Posts

    OOP 2 : Class/Object

    OOP 2 : Giao diện của đối tượng
    Interface of object

    Aristotle chắc hẳn là người đầu tiên nghiên cứu khái niệm type (kiểu); ông đã từng phát biểu về “chủng loài cá và chủng loài chim” (the class of fishes and the class of birds). Ý tưởng “mọi đối tượng, ngoài tính đơn nhất, luôn là một thành phần của một chủng loài, có những tính cách và hành vi chung” đã được áp dụng vào NNLT hướng đối tượng đầu tiên là Simula-67, với từ khóa cơ bản class đã giới thiệu một “kiểu” mới cho LTV.
    Class (lớp) có thể hiểu như là bản mô tả tập hợp những object (đối tượng có những thuộc tính (thành phần dữ liệu) và hành vi (chức năng) như nhau. Một class thực tế là một kiểu dữ liệu đặc biệt mà mỗi biến được khai báo từ đó ngoài việc mang dữ liệu, còn có những chức năng xử lý dữ liệu của bản thân. Cái hay ho là LTV định nghĩa một class (tạo một kiểu dữ liệu mới) để giải quyết vấn đề chứ không bị buộc phải lệ thuộc vào những kiểu dữ liệu có sẵn (được các nhà thiết kế NNLT thiết kế theo đơn vị lưu trữ trên máy tính). LTV có thể mở rộng ngôn ngữ bằng cách định nghĩa thêm các kiểu dữ liệu đặc thù cho vấn đề của riêng mình.
    Một khi LTV định nghĩa thành công một class, LTV có thể tạo bao nhiêu object tùy thích (hmm, dĩ nhiên tớ đang cố ý quên không xét đến những giới hạn của phần cứng), rồi thì tha hồ chơi bời với chúng như thể chúng là những thành phần tồn tại trong vấn đề bạn giải quyết. Thực tế, một trong những thách thức của OOP là công việc thiết lập sự tương quan giữa những object trong phạm vi vấn đề cần giải quyết (bài toán) và những object trong phạm vi giải pháp (giải pháp).
    Làm cách nào “bắt” object hành động ? Chắc chắn phải có một cách nào đó để LTV “ra lệnh” cho object, kêu nó làm cái gi đó; chẳng hạn như với object Form, kêu nó “biến” đi cho khuất mắt hay bắt nó dịch chuyển ra góc màn hình. Mỗi object chỉ có thể hiểu được những “yêu cầu” nhất định, tùy thuộc vào hệ thống class mà nó được sinh ra; ví dụ như với object Dogs thì ta kêu nó “bark” (sủa) được, chứ kêu nó “fly” (bay) thì nó chịu chết (tất nhiên nếu bác LTV nào hứng lên viết cho class Dogs một method fly thì ta sẽ có một loài chó biết bay). Trở lại vấn đề, những yêu cầu có thể đối với một object được định nghĩa bởi giao diện (interface) của nó; và, chính “kiểu” quyết định giao diện này.
    Ví dụ ta đã định nghĩa một class Light với hai chức năng là TurnOn (thực hiện bật đèn) và TurnOff (thực hiện tắt đèn). Cú pháp code giống như C++, tuy nhiên tớ nghĩ dễ hiểu cả với người chưa biết C++.
    Code:
    // khai báo một object mylight thuộc class Light
    Light mylight = new Light(); 
    // tới đây ta có một cái đèn tên là mylight
    
    // bật đèn mylight lên cho sáng
    mylight.TurnOn(); // --> đèn sáng
    
    // tắt đèn mylight tiết kiệm điện mùa khô
    mylight.TurnOff(); // --> đèn tắt
    Giao diện quyết định những yêu cầu nào có thể đưa ra cho một object. Tuy nhiên, rõ ràng là phải có code ở đâu đó được thực hiện khi object nhận yêu cầu. Code này, cùng với những dữ liệu ẩn, là những đặc tả implementation. Với những bạn có kiến thức về lập trình thủ tục (procedural programming), có thể hiểu như là mỗi “kiểu” có những hàm (function) liên đới, tương ứng với mỗi yêu cầu. Khi object nhận được yêu cầu, hàm tương ứng sẽ được gọi. Tiến trình này thường được tổng quát hóa bằng cách mô tả LTV “gửi một thông điệp” (send a message/make a request) đến một object, và object đó biết phải làm gì (execute code) với thông điệp này.
    Trong ví dụ trên, tên của “kiểu”/class là Light, và mylight là tên một object cụ thể thuộc class Light. Bạn có thể thấy rằng, với những object thuộc class Light, những yêu cầu hợp lý có thể là TurnOn (bật), TurnOff (tắt), MakeBrighter (chỉnh sáng), MakeDimmer (chỉnh tối) v.v... Đoạn code Light mylight = new Light() thực hiện việc đăng ký vùng nhớ cho một object kiểu Light, thực hiện khởi tạo object (initialization, sẽ bàn sau) và gán một tham chiếu (reference) tên mylight đến object đó. Để dễ hiểu hơn, bạn hãy tưởng tượng object kiểu Light (chiếm một vùng nhớ trên bộ nhớ) như là một cái đèn xịn, biến tham chiếu mylight như là một cái remote (đèn xịn mà lị). Mỗi khi cần gì, bạn không phải chạy lại chỗ cái đèn mà chỉ cần bấm cái remote mylight là xong. Chính vì tham chiếu mylight đại diện cho object đèn nên có thể nhập nhằng gọi mylight là một object cũng được (ta hiểu là đang nói đến object mà mylight tham chiếu tới). Cú pháp gọi method (phương thức/chức năng/hành vi) ở trên là <tên object>.<tên method>; đoạn code mylight.TurnOn() thực hiện gửi yêu cầu "bật đèn" đến object mylight

    Chú ý :
    Mặc dù những gì ta làm khi lập trình hướng đối tượng là ‘tạo những kiểu dữ liệu mới’ (create new data types), thực tế mọi ngôn ngữ lập trình hướng đối tượng sử dụng từ khóa “class”. Khi bạn đọc từ “kiểu” (type), hãy xem như “lớp” (class); và ngược lại.
    Được sửa bởi danceswithwolves lúc 13:57 ngày 18-09-2002
    Quote Quote

  2. #2
    Tham gia
    16-07-2002
    Location
    no*i a^'y bi`nh ye^n
    Bài viết
    102
    Like
    0
    Thanked 0 Times in 0 Posts
    hihi, bài viết hay lắm, danceswithwolves gửi thêm vài bài về C# nữa nhé!!! ;-)

  3. #3
    Tham gia
    13-08-2002
    Bài viết
    762
    Like
    0
    Thanked 3 Times in 3 Posts
    cám ơn lời động viên (an ủi) của bạn... tớ sẽ cố.

  4. #4
    Tham gia
    16-07-2002
    Bài viết
    197
    Like
    0
    Thanked 0 Times in 0 Posts
    anh làm từ từ thôi cũng được, để tiếp thu được toàn bộ thì cũng cần có thời gian mà, thanks a lot,

  5. #5
    Tham gia
    16-07-2002
    Bài viết
    4,452
    Like
    0
    Thanked 307 Times in 60 Posts
    Hay lắm, cứ viết tiếp đi, cho tớ học ké luôn. Tớ chưa biết gì về lập trình cả (trừ Pascal)

  6. #6
    Tham gia
    13-08-2002
    Bài viết
    762
    Like
    0
    Thanked 3 Times in 3 Posts
    cái bác admin@ này tham lam quá, đã giỏi lắm thứ rồi vẫn còn ham... từ từ để tớ sống sót qua project (26/09) đã nhé...

  7. #7
    Tham gia
    13-08-2002
    Bài viết
    762
    Like
    0
    Thanked 3 Times in 3 Posts
    Bài viết được gửi bởi phoenix
    anh làm từ từ thôi cũng được, để tiếp thu được toàn bộ thì cũng cần có thời gian mà, thanks a lot,
    Dạ, sức anh cũng có hạn thôi, muốn làm lẹ cũng không được... cám ơn em đã quan tâm động viên.

  8. #8
    Tham gia
    23-07-2002
    Location
    Hà nội
    Bài viết
    182
    Like
    0
    Thanked 1 Time in 1 Post
    GOOD

  9. #9
    Tham gia
    23-07-2002
    Location
    Hà nội
    Bài viết
    182
    Like
    0
    Thanked 1 Time in 1 Post

    ...

    GOOD

  10. #10
    Tham gia
    01-10-2002
    Bài viết
    38
    Like
    0
    Thanked 0 Times in 0 Posts
    tui se post mot so bai ve VC ++ , ung ho DWW hoan toan --- tiep tuc di ,, tui dang can on lai mot so kien thuc ve oop

Trang 1 / 2 12 LastLast

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •