khái quát hóa khái quát hóa một vấn đề như thế nào?
Bài 4: Quan hệ khái quát - cụ thể hóa 4.1 Mở đầu Bài giảng giới thiệu một trong các quan hệ cơ bản giữa các lớp - Quan hệ khái quát hóa - cụ thể hóa. Khái quát hóa - cụ thể hóa là công cụ rất mạnh trong phương pháp hướng đối tượng, nhờ nó mà các nhà nghiên cứu có thể tạo nên mô hình khái niệm, qua đó miền vấn đề được mô tả một cách rõ ràng, một ưu điểm cơ bản nữa đó là có thể sửa đổi nó một cách dễ dàng, không như trong trường hợp hướng quan hệ (relation approach) . Bài giảng sẽ đề cập đến các vấn đề quan trọng nhất liên quan đến mối quan hệ này. 4.2 Khái quát - cụ thể hóa Từ viễn cảnh khái niệm, khái quát - cụ thể hóa (gọi tắt khái quát hoặc cụ thể ) là mối quan hệ giữa một lớp, gọi là lớp trên và một số lớp khác, gọi là lớp dưới, lớp trên dùng để mô hình các thực thể khái quát hơn là các thực thể được mô hình hóa ở lớp dưới. Từ viễn cảnh thiết kế, gắn liền với mối quan hệ khái quát – chi tiết hóa là cơ chế thừa kế (heritability), nhờ đó mà các thành phần cố định được chuyển từ lớp trên xuống lớp dưới. Điều đó có nghĩa là lớp dưới sở hữu mọi tính chất của lớp trên, ngoài ra nó còn có các tính chất riêng. Thừa kếlà mối quan hệ bắc cầu. Mối quan hệ khái quát hóa tạo nên cấu trúc hình cây gữa các lớp (hoặc cấu trúc khác không chứa đường vòng) được gọi là cấp bậc khái quát (cụ thể, thừa kế). Hình 1 cho thấy hai cách biểu diễn cấp bậc tương đương, ở đây lớp Thú vật là lớp trên của lớp Thú vật nuôi trong nhà, lớp này lại là lớp trên của lớp Bò, Lợn, Đà điểu, Gà. specjalizationgeneralizationBreed animalAnimalCow PigHenOstrichCow PigHenOstrichAnimalBreed animalspecjalizationgeneralizationBreed animalAnimalCow PigHenOstrichspecjalizationgeneralizationBreed animalAnimalCow PigHenOstrichCow PigHenOstrichAnimalBreed animalCow PigHenOstrichAnimalBreed animal Hình 1. Hai cách biểu diễn tương đương cấp bậc của các lớp. Như chúng ta đã nói ở trên, cấp bậc khái quát không thể chứa đường vòng (Hình 2). Nhưng nó có thể là (krata ), nó mô hình sự thừa kếnhiều lần (sẽ đề cập đến ở chương 4.2.6). K1K2K3K1K2K3 Hình 2. Cấp bậc không đúng vì nó chứa đường vòng. K3K2K1K4 Hình 3. Cấp bậc dạng lưới. Một trong các lỗi hay gặp đó là thiết kế cấp bậc cho lớp duy nhất dựa vào sự giống nhau giữa các thuộc tính. Khi thiết kế cấp bậc cần phải chú ý rằng các lớp trong cấp bậc phải có nghĩa gần giống nhau và chúng phải có chung tính chất: đối tượng ở lớp dưới phải là trường hợp cụ thể của lớp trên (một loại), nhưng mối quan hệ ngược lại không đúng. Ví dụ trong hình 4, lớp Index không được sử dụng đúng khi cho nó là lớp con của lớp Người. Đành rằng lớp Index có chứa các thuộc tính tên, họ và năm sinh, tuy vậy nó không phải là trường hợp cụ thể của lớp Người. index No.semesternamesurnamebirth datePersonStudent Indexindex No.semesternamesurnamebirth datePersonStudent Index Hình 4. Ví dụ định nghĩa không đúng lớp dưới Sự xuất hiện lớp và mối quan hệ khái quát – cụ thể hóa Trong các tài liệu nghiên cứu, chúng ta phân biệt hai loại xuất hiện lớp: • Xuất hiện trực tiếp • Xuất hiện gián tiếp Một đối tượng là xuất hiện trực tiếp của lớp, mà nó là thành hien, và là xuất hiên gián tiếp của tất cả các lớp trên nó. Ví dụ, lớp Sinh viên và lớp trên của nó Người: • Đối tượng của lớp Người là xuất hiện trực tiếp của lớp này và nó không phải là xuất hiện gián tiếp của bất cứ lớp nào vì trên lớp Người không có lớp nào khác. • Đối tượng của lớp Sinh viên là xuất hiện trực tiếp của lớp Sinh viên và là xuất hiện gián tiếp của lớp Người. Sự tồn tại lớp và mối quan hệ khái quát – cụ thể hóa Trong các tư liệu nghiên cứu, chúng ta có thể gặp 3 loại định nghĩa sụ tồn tại: • Sự tồn tại lớp K đó là tập tất cả các xuất hiện của K (trực tiếp hoặc gián tiếp) và các lớp con của nó, mà các xuất hiên chỉ chứa các thuộc tính của K. • Cũng như phần trên, sự tồn tại lớp K đó là tập tất cả các xuất hiện của K và lớp con của nó, nhưng ở đây chúng ta cho phép tất cả các thuộc tính. • Sự tồn tại lớp K đó là tập tất cả các xuất hiện trực tiếp của K. Trong bài giảng này chúng ta sẽ sử dụng định nghĩa đầu tiên. Theo định nghĩa này sự tồn tại của lớp Người và các lớp con Nhân viên được biểu diễn trong Hình 5. name = ”Barbara”surname = ”Wyka”name = ”Zenon”surname = ”Nowak”namesurnameage ()Studentindex No.gradesgrades avg ()name = ”Wanda”surname = ”Niemiec”index No. = 43789grades = ”4, 5, 5, 3”name = ”Zenon”surname = ”Nowak”index No. = 44564grades = ”3.5, 4, 4”name = ”Barbara”surname = ”Wyka”index No. = 44333grades = ”5, 4.5, 5, 3.5”extent of the Person classextent of the Student classPerson: Student : Student: Studentname = ”Wanda”surname = ”Niemiec”: Osoba:Personname = ”Teofil”surname = ”Jeleń”name = ”Barbara”surname = ”Wyka”name = ”Zenon”surname = ”Nowak”namesurnameage ()Studentindex No.gradesgrades avg ()name = ”Wanda”surname = ”Niemiec”index No. = 43789grades = ”4, 5, 5, 3”name = ”Zenon”surname = ”Nowak”index No. = 44564grades = ”3.5, 4, 4”name = ”Barbara”surname = ”Wyka”index No. = 44333grades = ”5, 4.5, 5, 3.5”extent of the Person classextent of the Student classPerson: Student : Student: Studentname = ”Wanda”surname = ”Niemiec”: Osoba:Personname = ”Teofil”surname = ”Jeleń” Hình 5. Ví dụ sự tồn tại lớp Người và các lớp con Sinh viên. Lớp trừu tượng và lớp cụ thể Lớp trừu tượng đó là lớp không có xuất hiện trực tiếp. Lớp trừu tượng có tác dụng duy nhất để làm lớp trên của các lớp khác, nó tạo nên phần định nghĩa chung của nhóm các lớp có tính chất gần giống nhau. UML cho phép định nghĩa các thực thể trừu tượng (lớp hoặc phương pháp trừu tượng) nhờ giá trị của nhãn hiệu (label) {abstract = TRUE} (hoặc rút gọn {abstract}); hãy xem bài giảng nói về cơ chế mở rộng) hoặc bằng cách viết tên của thực thể bằng chữ in nghiêng (cách này không hữu hiệu trong trường hợp sơ đồ được vẽ bằng tay). Khác với lớp trừu tượng, lớp cụ thể có thể có xuất hiện trực tiếp. Tuy vậy có thể tồn các thời điểm mà lớp cụ thể có thể không có xuất hiện nào cả. Ví dụ lớp trừu tượng và lớp cụ thể được biểu diễn trong trong Hình 6. Chúng ta hãy để ý bản in mẫu (stereotype) <<intanceOf>> ký hiệu mối quan hệ giữa lớp và sự xuất hiện của nó. Int sequence . implementationsChar sequence . implementationsSequencefirstnextLegal person{abstract}Natural person Firm:Natural person :Firm :Firm«instanceOf»«instanceOf»«instanceOf»Int sequence . implementationsChar sequence . implementationsSequencefirstnextInt sequence . implementationsChar sequence . implementationsSequencefirstnextLegal person{abstract}Natural person Firm:Natural person :Firm :Firm«instanceOf»«instanceOf»«instanceOf»Legal person{abstract}Natural person Firm:Natural person :Firm :Firm«instanceOf»«instanceOf»«instanceOf» Hình 6. Lớp trừu tượng và lớp cụ thể Lớp trừu tượng phải là lớp trên của các lớp khác, nên nó không thể là lá (mắt cuối cùng) trong bậc thang (hiearchy) thừa kế. Yêu cầu đó tất nhiên không liên quan đến lớp cụ thể, nó có thể nằm ở bất cứ chỗ nào trong bậc thang đó. Chúng ta hãy nghiên cứu sơ đồ trong hình vẽ 3: • Chỉ có lớp K1 i K3 có thể là lớp trừu tượng; • Tất cả các lớp đều có thể là lớp cụ thể. K1K2 K3K4 K5 Hình 7. Sơ đồ diễn giải vấn đề lớp trừu tượng và lớp cụ thể. Phương pháp trừu tượng Chúng ta đã nói ở phần bài giảng liên quan đến đối tượng và lớp, phương pháp trừu tượng có phần định nghĩa (signature) nhưng không có phần thi hành. Lớp chứa ít nhất một phương pháp trừu tượng gọi là lớp trừu tượng, bởi vì không thể tạo ra được đối tượng mà không có phần thực hiện một thao tác nào đó. Phần thực hiện phương pháp trừu tượng nằm ở một nhóm dưới nào đó của lớp trừu tượng. Ví dụ chúng ta hãy xem Hình 8: phần định nghĩa thao tác hãy tính lương nằm trong lớp trừu tượng Pracownik, mỗi một lớp con của lớp này có phần thi hành riêng phù hợp với yêu cầu của từng lớp. Employee{abstract}earned in current yearbirth datecalculate salary (){abstract}calculate age ()Wage employeeregular wageholiday wagecalculate salary ()Full-time employeeweek’s wagecalculate salary ()Contractormonth’s wage calculate salary ()Employee{abstract}earned in current yearbirth datecalculate salary (){abstract}calculate age ()Employee{abstract}earned in current yearbirth datecalculate salary (){abstract}calculate age ()Wage employeeregular wageholiday wagecalculate salary ()Wage employeeregular wageholiday wagecalculate salary ()Full-time employeeweek’s wagecalculate salary ()Full-time employeeweek’s wagecalculate salary ()Contractormonth’s wage calculate salary ()Contractormonth’s wage calculate salary () Hình 8. Ví dụ phương pháp trừu tượng Lớp trừu tượng có thể chứa phương pháp trừu, nhưng không bắt buộc. Nhưng lớp cụ thể phải chứa đầy đủ phần thực hiện các thao tác, mà chưa được thực hiện ở các lớp trên nó. Cụ thể hóa trên một phương diện và đa phương diện Các nhóm dưới của một nhóm đã cho được phân biệt nhờ một tiêu chuẩn (một tính chất) gọi là phượng diện cụ thể hóa (hoặc yếu tố phân biệt); thường thì tiêu chuẩn đó là loại. Yếu tố phân biệt là phần tử không bắt buộc, có nghĩa là nó có thể nhưng không bắt buộc phải được chỉ rõ trên sơ đồ; nếu nó xuất hiện, thì nó sẽ được đặt ở cạnh dấu cụ thể hóa. Ví dụ trong Hình 9 biểu diễn sơ đồ, nhận dạng các loại vật dụng: các loại máy bơm khác nhau và các loại thùng chứa khác nhau (để đơn giản hóa sơ đồ, các lớp con Bơm và Thùng chứa không ghi trong sơ đồ). Tankvolumepressureequipment typepump typetyp zbiornikaEquipmentnamemanufacturerpricesuction pressureexpression pressureflowPumpsurfacepipe diameterRadiatorspecjalization aspect(discriminator)Tankvolumepressureequipment typepump typepump typetyp zbiornikatyp zbiornikaEquipmentnamemanufacturerpricesuction pressureexpression pressureflowPumpsuction pressureexpression pressureflowPumpsurfacepipe diameterRadiatorsurfacepipe diameterRadiatorspecjalization aspect(discriminator)specjalization aspect(discriminator) Hình 9. Ví dụ cụ thể hóa một phương diện Phương pháp khác để mô hình mối quan hệ cụ thể hóa (nêu trong Hình 9) được trình bày trên Hình 10. Chúng ta để ý đến giới hạn và các thuộc tính đặc biệt của mỗi loại vật dụng ở dây là các thuộc tính không bắt buộc. Ngoài ra, để có thể xác định loại vật dụng một cách dễ dàng chúng ta đưa thêm thuộc tính loại vật dụng. Đối với sơ đồ ở hình 9 thuộc tính này không quan trọng, bởi vì loại vật dụng được xác định bởi sự có mặt của đối tượng ở trong lớp tượng ứng. namemanufacturerpricesuction pressureexpression pressureflowsurfacepipe diametervolumepressureequipment typeEquipmentattributes specific for particular type of equipment:• pump: suction pressure, expression presure,flow• radiator: surface, pipe diameter• tank: volume, pressurenamemanufacturerpricesuction pressureexpression pressureflowsurfacepipe diametervolumepressureequipment typeEquipmentnamemanufacturerpricesuction pressureexpression pressureflowsurfacepipe diametervolumepressureequipment typeEquipmentattributes specific for particular type of equipment:• pump: suction pressure, expression presure,flow• radiator: surface, pipe diameter• tank: volume, pressureattributes specific for particular type of equipment:• pump: suction pressure, expression presure,flow• radiator: surface, pipe diameter• tank: volume, pressure Hình 10. Mô hình mối quan hệ cụ thể hóa bởi lớp với các thuộc tính không bắt buộc và các thuộc tính phụ. Mỗi một phương diện cụ thể hóa đó là một cách phân chia các lớp con, số cách phân chia các lớp con là không giới hạn; nói cách không có sự giới hạn đối với số phương diện, mà trên cơ sở đó chúng ta có thể định nghĩa các lớp con. Trong ví dụ biểu diễn trên Hình 9 đối với các lớp Vật dụng, Bơm, Thùng chứa các lớp con được định nghĩa dựa trên cơ sở của một phương diện duy nhất (đó là loại vật dụng, loại bơm và loại thùng chứa), có nghĩa là đối với các lớp này chỉ có một cách phân chia thành các lớp con. Trường hợp này được gọi là cụ thể hóa trên một phương diện để phân biệt với cụ thể hóa đa phương diện, có nghĩa là tồn tại ít nhất 2 cách chia lớp con. Ví dụ cụ thể hóa đa phương diện được biểu diễn trên Hình 11, chúng ta có thể nhìn lớp Các loại xe được phân loại theo hai phương diện sau đây: • động cơ dùng để khởi động chúng – động cơ chạy bằng sức gió hay động cơ xăng; • địa hình, mà xe đó có thể đi được - trên đất liền hay trên biển; Vehicle{overlapping}WindvehicleEnginevehicleLandvehicleSeavehiclepropulsionterrainterrain{overlapping}Vehicle{overlapping}WindvehicleEnginevehicleLandvehicleSeavehiclepropulsionterrainterrain{overlapping} Hình 11. Ví dụ của mối quan hệ cụ thể đa phương diện. Không phụ thuộc cụ phép thể hóa là một phương diện hay đa phương diện, UML phân biệt các cách chia lớp sau đây (trong ngoặc là ký hiệu bằng tiếng anh, sử dụng ở trong bài giảng này): • Phân chia không có phần giao (disjoint), khi mà các lớp con không có phần chung; ngược lại với phân chia không giao là phân chia có chứa phần chung (overlapping); cách chia thứ nhất giả định là được sử dụng, vì vậy nó không được đánh dấu trên sơ đồ; • Phân chia đầy đủ (complete), khi mà tất cả các lớp con được phân loại; ngược lại với phân chia đầy đủ là phân chia không đầy đủ (incomplete); cách phân chia đầy đủ được giả sử là đuợc sử dụng. Mỗi cách phân chia đều được đánh dấu trên sơ đồ bằng các ký hiệu riêng. Chúng ta để ý rằng trêb Hình 11, không cách phân chia nào thuộc loại không có phần giao, có nghĩa là tồn tại các loại xe, vừa có động cơ xăng vừa có thể chạy bằng sức gió, cũng tồn tại các loại xe, mà có thể chạy đồng thời trên mặt đất cũng như trên biển. Thường đối với mối quan hệ cụ thể đơn phương diện, yếu tố phân biệt được bỏ qua, bởi vì chúng ta giả sử, rằng tên của lớp con cung cấp đầy đủ thông tin, sự phân chia được thực theo tiêu chuẩn nào. Trong trường hợp cụ thể hóa đa phương diện, yếu tố phân biệt bắt buộc phải trình bày. Hình elíp Không nên nhầm lẫn từ khóa incomplete, dùng để chỉ sự phân chia không đầy đủ với các thành phần khác có tên là elíp (hay là: bỏ qua), biểu diễn ở dạng („ .”). Sự khác nhau căn bản giữa hai khái niệm này là incomplete chỉ sự phân chia không đầy đủ, tức là trong miền vấn đề đang xét, một tồn tại một số lớp mà định nghĩa của nó chưa xác định được. Còn elíp có nghĩa rằng một số lớp mặc dù có định nghĩa đầy đủ, nhưng nó không quan trọng tại thời điểm đang xét, vì vậy nó bị bỏ qua, hay là nó không được biểu diễn trên sơ đồ. Ví dụ sử dụng elíp được cho thấy trên Hình 15. Cụ thể hóa nhiều lần Cụ thể hóa nhiều lần dùng trong tình huống, khi mà một lớp là kết quả cụ thể hóa của vài lớp khác nhau, có nghĩa là nó được thừa kếtrực tiếp của nhiều hơn một lớp trên nó. Hãy nghiên cứu Hình 12: • Lớp con của lớp Người là các lớp Nhân viên và Sinh viên; • Để mô hình tập những người vừa đi học vừa đi làm, chúng ta phải tạo ra một lớp mới với tên gọi Sinh viên đi làm. Lớp này đồng thời là lớp con của lớp Nhân viên vừa là lớp con của lớp Sinh viên. WorkingstudentsurnamePersonEmployeesalaryStudentindex No.WorkingstudentsurnamePersonEmployeesalaryStudentindex No. Hình 12. Ví dụ cụ thể hóa nhiều lần Mặc dù là cụ thể hóa nhiều lần trong một số trường hợp rất cần thiết, ý tưởng này bị nhiều chuyên gia chỉ trích. Nhược điểm lớn nhất được họ chỉ ra đó là lớp con – kết quả cụ thể hóa nhiều lần ở một nơi nối nhiều các thực thể không liên quan đến nhau. Một trong các hậu quả là nó gây nên mâu thuẫn tên gọi, ví dụ trong trường hợp, khi mà các lớp trên có các thành phần cố định giống hệt tên gọi. Sau khi thừa hường các thành phần đó trở thành thành phần của một lớp, trong khi một lớp không thể chứa vài thành phần có cùng tên gọi. Mâu thuẫn tên gọi cổ điển được trình bày trên Hình 13: Lớp Amfibia thừa kếcủa các lớp trên hai thuộc tính và hai phương pháp cótên giống hệt nhau. Từ đó xuất hiện sự mâu thuẫn về tên gọi, đưa đên các câu hỏi sau đây: • Lớp Amfibia phải thừa kếthuộc tính vận tốc lớn nhất nào? • Ý nghĩa của phương pháp vận tốc sử dụng() có phụ thuộc vào mạch thừa kếkhông? Vehiclemax speedrecomended speed ()max speedrecomended speed()AmphibiaCar YachtSea vehicleLand vehicle{ recomended speed equals50% of max speed }Vehiclemax speedrecomended speed ()max speedrecomended speed()AmphibiaCar YachtSea vehicleLand vehicle{ recomended speed equals50% of max speed }{ recomended speed equals50% of max speed } Hình 13. Ví dụ mâu thuẫn tên gọi Vấn đề này dựoc giải quyết bằng nhiều cách khác nhau tùy thuộc vào môi trường thực hiện. Ví dụ trong ngôn ngữ Eiffel mâu thuẫn tên được coi là lỗi, có nghĩa là ngừoi lập sơ đồ phải chú ý để tránh mâu thuẫn. Thừa kế động Từ trước đến nay chúng ta giả sử rằng đối tượng là sự xuất hiện của một lớp trong suốt quá trình tồn tại của nó. Chúng ta có thể dễ dàng nhận thấy, là điều giả sử có nhược điểm rất quan trọng, bởi vì điều đó không cho phép mô hình hóa tiình huống khi mà thực thể thay đổi thể loại của mình trong quá trình sống của nó. Ví dụ: một người có thể làm việc như một nhà điều hành, một kỹ sư, nhân viên bán hàng hoặc nếu cần thiết họ có thể đổi nghề nghiệp. Dạng thông tin kiểu này có thể biểu diễn dễ dàng nhờ cơ chế thừa kếđộng, cho phép đối tượng trong quá trình sống có thể thay đổi lớp, mà nó làm thành viên, không cần thay đổi tên nhận dạng. Cơ chế thừa kếđộng đòi hỏi, lớp dưới tiếp nhận các thành phần cố định của lớp trên trong quá trình chương trình hoạt động. Bậc thang thừa kếđộng cho ví dụ đang xét được biểu diễn trên Hình 14. Chúng ta để ý rằng yếu tố phân loại Nghề nghiệp được gắn thêm stereotype „dynamic” với ý nghĩa là ở đó sẽ dùng quyền thừa kế động. Stereotype này được đưa vào bởi nhà phương pháp học nổi tiếng M. Fowler, tuy vậy stereotype này không được định nghĩa sẵn trong ngôn ngữ UML. Muốn sử dụng nó trong sơ đồ cần phải đưa định nghĩa của nó ở trong văn bản thiết kế. PersonManagerEngineerShop assistantWomanMangender«dynamic»occupationPersonManagerEngineerShop assistantWomanMangender«dynamic»occupation Hình 14. Ví dụ thừa kế động Khái niệm thừa kếđộng, mặc dù đó là một phương tiện hữu ích trong mô hình khái niêm, đến nay nó vần chưa được thực hiện một cách đầy đủ trong bất cứ ngôn ngữ lập trình nào. Mở rộng và giới hạn trong lớp con Như chúng ta đã biết, lớp con ngoài những tính chất của riêng mình nó còn có tính chất của tất cả các lớp trên nó. Lớp con mặc dù không thể bỏ qua hoặc thay đổi thuộc tính của lớp trên, tuy vậy nó có thể thay đổi một số tính chất, ví dụ: • Lớp con có thể thay đổi nội dung phương pháp nhân được từ lớp trên, nhưng không được thay đổi tên và các argumen của phương pháp (method specification) – cơ chế này gọi là che giấu phương pháp (hãy xem chương 4.2.9) . cơ chế này cho phép thay đổi hẳn nội dung của phương pháp hoặc có thể chỉ mở rộng nội dung. Trong trường hợp „mở rộng” một số môi trường thực hiện cung cấp phương tiện để cho phép giấu nội dung phương pháp ở lớp trên trong ruột của lớp dưới. • Lớp dưới có thể thêm tùy ý các thuộc tính và phương pháp mới, có nghĩa là mở rộng tập tính chất của nó. • Lớp dưới có thể giới hạn giá trị của thuộc tính, ví dụ Hình tròn là lớp con của Hình Elíp, trong trường hợp hai đường kính của nó bằng nhau. Cần phải nhớ rằng, giới hạn có thể dẫn đến một số phương pháp không còn hoạt động đúng; ví dụ, trong phương pháp Elíp cho phép thay đổi giá trị một đường kính, nhưng phương pháp này không còn đúng trong lớp Đường tròn, bởi vì trong trường hợp này hai đường kính phải thay đổi đồng thời. Che giấu phương pháp Che giấu phương pháp là cơ chế, cho phép phương pháp ở lớp cụ thể hơn che phương pháp ở lớp khái quát hơn. Cơ chế này được sử dụng trong tình huống, khi phương pháp thực hiện thao tác ở lớp dưới đòi hỏi phải sử dụng thuật toán khác với thuật toán dùng cho lớp trên. Cơ chế này cho phép mở rộng bậc thang thừa kế mà không cần phải thay đổi cấu trúc của các lớp đã tồn tại, vì vậy đó là cơ chế rất quan trọng phụ giúp cơ chế sử dụng lại. Cơ chế che giấu liên quan mật thiết với cơ chế đa dạng (polymorphism) của phương pháp và nó yêu cầu phải có mối liên kết động. Vấn đề che giấu phương pháp được biểu diễn trên Hình 15, ở đây có hai phương pháp thực hiện thao tác tính thể tích của hình khối: • Phương pháp Hãy tính thể tích() trong lớp trừu tượng Hình khối tính thể tích các hình theo công thức (1). Phương pháp này không phải là phương pháp trừu tượng, nó được các lớp con Khối chữ nhật và Hình trụ thừa kế, các lớp này không phương pháp tính thể tích riêng. • Thể tích hình nón tính cách khác so với thể tích các hình trên (theo công thức (2)), phương pháp Hãy tính thể tích() của lớp Hình nón che phương pháp tính thể tích của lớp trên Hình khối. CuboidCylinderSolid figure{abstract}base’s areahightcalculate volume ()Conecalculate volume (). . .equation (1)volume = bases’s area * hight }equation (2)volume = 1/3 of base’s area * hightCuboidCylinderSolid figure{abstract}base’s areahightcalculate volume ()Conecalculate volume ()Conecalculate volume (). . .equation (1)volume = bases’s area * hight }equation (1)volume = bases’s area * hight }equation (2)volume = 1/3 of base’s area * hightequation (2)volume = 1/3 of base’s area * hight Hình 15. Ví dụ cơ chế che phương pháp Sơ đồ lớp ở trên có thể xây dựng bằng cách khác: phương pháp trừu tượng ở lớp Hình khối và hai phương pháp tính thể tích ở các lớp con Khối hộp và Hình trụ; phương pháp tính thể tích hình trụ ở lớp Hình trụ không thay đổi. Tuy vậy nhìn từ khía cạnh khả năng sử dụng lại, thì rõ ràng lời giải thứ hai kém hơn lời giải thứ nhất. Định nghĩa đúp phương pháp Định nghĩa đúp là cơ chế, mà trong đó ý nghĩa của các ký hiệu (ví dụ phép toán hay hàm) phụ thuộc vào tình huống sử dụng, ví dụ phụ thuộc vào số lượng hoặc loại agumen : • Phương pháp hãy dịch chuyển (x,y) và hãy dịch chuyển (x,y,z) khác nhau số lượng igumen; • Phương pháp hãy dịch chuyển (int, int) và hãy dịch chuyển (float, float) khác nhau về loại igumen; • Phương pháp hãy dịch chuyển (int, float, int) và hãy dịch chuyển (float, int) khác nhau cả về số lượng và loại igumen. Trong thực tế phép tính hay dùng định nghĩa đúp nhất đó là phép so sánh „=” (tất nhiên nếu môi trường thực hiện cho phép), dùng để so sánh các số nguyên, số thực, dãy ký tự, tên gọi, cấu trúc,…Tương tự phép tính „+” có thể dùng để cộng các số hoặc có thể dùng để nối các dãy ký tự. Định nghĩa đúp khác với phương pháp che ở chỗ là nó không yêu cầu mối liên kết động, bởi vì ý nghĩa của phép toán có thể rút ra trong lúc phân tích chương trình. 4.3 Tóm lại Bên cạnh khái niệm đối tượng và lớp, khái quát – cụ thể hóa đó là khái niệm không thể thiếu trong phương pháp hướng đối tượng. Mối quan hệ này cho phép định nghĩa các thực thể trong miền vấn đề ở các mức độ khái quát khác nhau. Vấn đề này rất phức tạp. Thuật ngữ khái quát – cụ thể hóa còn chứa đựng bên trong nhiều khái niêm liên quan, ví dụ phương pháp trừu tượng, cụ thể hóa trên một phương diện hay đa phương diện hoặc cơ chế che phương pháp. Hơn nữa, đến nay các chuyên gia trong lĩnh vực này vẫn tiếp tục nghiên cứu để tìm ra những ý tưởng mới liên quan đến cơ chế khái quát – cụ thể hóa, để có thể sử dụng cơ chế này một cách đơn giản hơn; ví dụ cơ chế thừa kếđộng. 4.4 Câu hỏi và các vấn đề tập giải quyết 1. Hãy mô tả ngắn gọn mối quan hệ khái quát – cụ thể hóa. 2. Phương pháp trừu tượng là gì, nó dùng để làm gì? 3. Phương pháp trừu tượng có thể là „lá” (đứng ở vị trí cuối cùng) trong bậc thang thừa kếkhông? 4. Cụ thể hóa trên một phương diện khác trên đa phương diện như thế nào? Câu trả lời hay đưa kèm ví dụ. 5. Trong sơ đồ lớp cho cửa hàng mượn đĩa DVD (Bài giảng 2, chương 2.12) hãy cho thêm mối quan hệ khái quát - cụ thể hóa và các phương pháp trừu tượng. [...]... pháp trừu tượng có thể là „lá” (đứng ở vị trí cuối cùng) trong bậc thang thừa kếkhơng? 4. Cụ thể hóa trên một phương diện khác trên đa phương diện như thế nào? Câu trả lời hay đưa kèm ví dụ. 5. Trong sơ đồ lớp cho cửa hàng mượn đĩa DVD (Bài giảng 2, chương 2.12) hãy cho thêm mối quan hệ khái quát - cụ thể hóa và các phương pháp trừu tượng. . hệ khái quát - cụ thể hóa 4.1 Mở đầu Bài giảng giới thiệu một trong các quan hệ cơ bản giữa các lớp - Quan hệ khái quát hóa - cụ thể hóa. Khái quát hóa. liên quan đến mối quan hệ này. 4.2 Khái quát - cụ thể hóa Từ viễn cảnh khái niệm, khái quát - cụ thể hóa (gọi tắt khái quát hoặc cụ thể ) là mối quan hệ