30/09/2018, 21:45

Vài thắc mắc về OOP trong C++ và Java?

Sau khi đọc mấy bài viết trên mạng mình có 1 vài thắc mắc về tính đa hình trong OOP
1.
cơ chế thực thi tính đa hình trong C++ và Java có giống nhau hay không ???
bên C++ mình đọc thì khi 1 method khai báo virtual thì khi compile nó sẽ tạo ra các virtual table và các pointer virtual (con trỏ hàm) để giúp đối tượng có thể gọi đến đúng method mà tương ứng với trạng thái của nó tại 1 thời điểm trong quá trình run-time
2.
static binding và dynamic bindind ???
theo mình đọc trên mạng thì static binding có nghĩa là 1 sự kết nối giữa lời gọi hàm với hàm thực thi được xác định tại thời điểm compile , dynamic binding có nghĩa là tại thời điểm compile thì chỉ xác định được kiểu dữ liệu của đối tượng và chưa xác định được chính xác kết nối giữa lời gọi hàm và hàm thực thi , cho đến khi chương trình thực thi (run-time) lúc đó thì mới xác định được trạng thái chính xác của đối tượng (lúc này đối tượng mới thực sự được tao ra) và lúc đó mới xác định được lời gọi hàm đó gọi đến hàm nào
không biết mình hiểu như vậy có đúng không???
3.
Nếu theo lý thuyết trên thì bất kì chương trình nào cũng sẽ xuất hiện 2 kiểu kết nối trên ,nếu không xuất hiện sự thừa kế thì tất cả sẽ là static binding ,nhưng kể cả khi xuất hiện thừa kế nhưng nếu method hoặc field được khai báo static , final ,private thì chắc chắn sẽ xảy ra kết nối tính (static binding)trên những method và field đó .
Còn kết nối động (dynamic binding) sẽ chỉ xảy ra khi xuất hiện sự kế thừa , có nghĩa là đối tượng gọi đến method có thể xuất hiện nhiều trạng thái trong quá trình run-time (ở bên C++ thì mình thấy khi có xuất hiện của hàm ảo thì nó mới xuất hiện dynamic binding , còn java thì không biết cơ chế bên trong nó thế nào) , những suy nghĩ của mình có đúng không??
vd :

 class cha(){
      show(){
       // show cha
      }
 }

 class con() extends cha{
     show(){
     //show con
    }
 }

 class main(){
    
    public static void main(){
      cha cha = new cha();// trang thái 1
      cha = new con(); // trạng thái 2
      // ứng với 2 trạng thái này thì lời gọi hàm show() cũng sẽ gọi đến những hàm thực thi khác nhau
    }
 }

overloading cũng là đa hình vì 1 lời gọi hàm nhưng tùy vào sự thay đổi của danh sách tham số mà các hàm sẽ thực thi khác nhau …và nếu lý thuyêt trên đúng thì nếu không xuất hiện sự thừa kế thì chắc chắn ở đây sẽ là static binding

Mình không hiểu bạn đang thắc mắc gì ở đây, cấu trúc bên trong từng ngôn ngữ hả bạn

Reoteu Ray viết 23:46 ngày 30/09/2018

ừ cách mà nó thực hiện ấy , ví dụ như ở đây giải thích về đa hình trong C++ diễn ra thế nào

Bài liên quan
0