Bài giảng Lập trình hướng đối tượng với Java - Chương 4: Tính kế thừa và hình

Là lớp được khai báo bên trong một lớp khác. Lớp trong truy xuất được lớp ngoài. Lớp ngoài có phải có ít nhất một thành phần là instance của lớp trong và truy xuất các instance này.

ppt32 trang | Chia sẻ: dntpro1256 | Lượt xem: 691 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình hướng đối tượng với Java - Chương 4: Tính kế thừa và hình, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 04 TÍNH KẾ THỪA VÀ ĐA HÌNH INHERITANCE - POLYMORPHISM1Ôn tậpAccsess modifier: chỉ thị mức độ cho phép bên ngoài truy cập vào một dữ liệu hay một hành vi của 1 lớp.Khi thiết kế 1 lớp: Cần xem xét để chọn access modifier phù hợp đối với từng thành phần.Nếu muốn kết thúc một lớp( lớp không con), một hành vi (không cho hiệu chỉnh), một dữ liệu (là hằng): Dùng chỉ thị final.Dữ liệu static là dữ liệu toàn cục của chương trình.Code static là code được thực thi ngay lúc lớp được tham khảo đến.Hành vi static là hàm toàn cục.Truy xuất thành phần static thông qua tên lớp hoặc một đối tượng thuộc lớp.2Ôn tậpConstructor: Hành vi được thực thi ngay lúc khởi tạo đối tượng.Tập các constructor tạo ra tập các mẫu khởi tạo biến đối tượng.Một đối tượng sống từ lúc đối tượng được khởi tạo (bằng new) cho đến khi khối chứa nó được thực thi xong.Tầm vực của 1 đối tượng là vùng văn bản chương trình từ lúc định nghĩa biến đến hết khối chứa biến này.Destructor: Hành vi được thực thi vào lúc đối tượng chết ( Java không hỗ trợ destructor).3Đặc tính truy xuấtModifierprivatefriendlyprotectedpublicCùng classYESYESYESYESCùng gói, khác classNOYESYESYESlớp con trong cùng gói với lớp chaNOYESYESYESKhác gói, khác lớpNONONOYESLớp con khác gói với lớp chaNONOYESYES4Mục tiêuGiải thích được:Thừa kế là gì trong OOP.Các loại thừa kế trong các ngôn ngữ OOP.Đa hình là gì trong OOP.Phân biệt được kỹ thuật Overloading và Overriding.Hiện thực được đặc điểm thừa kế trong OOP với Java.Hiện thực được đặc điểm đa hình trong OOP với Java.Sử dụng được toán tử instanceof và ép kiểu trong JavaGiải thích được những tình huống có thể xẩy ra khi ép kiểu.Giải thích được loại tham số trong hàm của Java.5Nội dung4.1- Tính kế thừa – Inheritance.4.2- Các loại thừa kế.4.3- Hiện thực lớp con trong Java.4.4- Tính đa hình.4.5- Kỹ thuật Overriding4.6- Quan hệ qiữa các lớp4.7- Toán tử instanceof4.8- Vấn đề ép kiểu trong Java4.9- Tham số của hàm trong Java64.1- Tính kế thừa – InheriatanceKhả năng một lớp thừa hưởng data và code từ một hay nhiều lớp khác.Kỹ thuật giúp tái sử dụng code  Tiết kiệm công sức lập trình, công sức kiểm tra code.74.2- Các loại thừa kế.Đơn thừa kếĐa thừa kế ( thừa kế bội)Mỗi ngôn ngữ OOP hỗ trợ khả năng thừa kế riêng.C++ : đa thừa kế.C# , Java : Đơn thừa kế84.3- Hiện thực lớp con trong Java.class CLASSNAME extends FATHERCLASSNAME{ DataType1 Property1 [=Value]; DataType2 Property1 [=Value]; CLASSNAME (DataType Arg,) // constructor { } [Modifier] DataType MethodName( DataType Arg,) { }}Lớp con là mở rộng của lớp cha9100empmngp200300P01Hoa21P02Luan25150P03Quang25150200100200300Thí dụ về thừa kế10Bài tậpPhân tích phân cấp thừa kế cho các lớp:(làm tại lớp)Hàng điện máy Hàng sành sứ Hàng thực phẩm Viết chương trình tạo mỗi loại một mặt hàng cụ thể. xuất thông tin về các mặt hàng này (Lab)Gợi ý: cách viết tương tự thí dụ vừa rồi.114.4- Tính đa hình - PolymorphismĐa hình thái, nhiều cách phản ứng khác nhau cho cùng một hành vi.Lớp A có hành vi M().Lớp B là con của lớp A, trong lớp B viết lại hành vi M().Có biến đối tượng obj.Tại thời điểm t1: obj chỉ đến một thực thể A. obj.M() sẽ cho một phản ứng.Tại thời điểm t2: obj chỉ đến một thực thể B. obj.M() sẽ cho một phản ứng khác.Tính đa hình có được là nhờ kỹ thuật override hành vi giữa 2 lớp cha con.124.5- Kỹ thuật OverridingOverride: ghi đè, thay thế code một hành vi thừa kế từ lớp cha để lớp con phản ứng khác với phản ứng của lớp cha khi cùng được yêu cầu thực thi hành vi này.Khác biệt giữa overloading và overriding:Overloading: Kỹ thuật cho phép nhiều hành vi trùng tên nhưng khác chữ ký trong cùng một lớp.Overriding: Kỹ thuật cho phép sửa code của một hành vi mà lớp con thừa kế từ lớp cha để lớp con phản ứng khác với lớp cha.13Thí dụ về overload và overrideoverloading method:cùng tên, khác tham số, cùng lớpoverriding method:cùng tên,cùng tham số,ở hai lớp cha con14Thí dụ...thêm đuôithêm đầu15Bài tập (Lab)Xây dựng thêm lớp MyArray3 kế thừa từ lớp MyArray2 có thêm các hành vi: Add (int ar[]) để thêm cả mảng ar vào tập trị.Remove(int i) để xoá phần tử ở vị trí i.RemoveAll (int x) để xóa mọi xuất hiện của x trong tập trị.IndexOf (int x) để tìm xuất hiện đầu của trị trong tập trị.LastIndexOf (int x) để tìm xuất hiện cuối của trị trong tập trị.Viết chương trình minh họa các hành vi này.16Thí dụ : Đối tượng lớp cha nhưng cụ thể lại là lớp conBiến đối tượng là tham khảo nên hoàn toàn có thể khai báo biến là lớp cha nhưngkhởi tạo biến là đối tượng thuộc lớp con.Tính đa hình174.6- Quan hệ giữa các lớpHai lớp không có quan hệ.Quan hệ cha con : tính thừa kế ( đã bàn rồi).Quan hệ bao gộp: Lớp có thành phần dữ liệu là thể hiện của 1 lớp khác.Lớp thành phần là lớp bên ngoài.Lớp thành phần là lớp bên trong (lớp nội) 184.6.1-Lớp có dữ liệu là một đối tượng của lớp ngoàiChương trình xuất hóa đơn19Lớp có dữ liệu là một đối tượng của lớp ngoài... 20Lớp có dữ liệu là một đối tượng của lớp ngoài...214.6.2-Lớp nội – Inner/nested classLà lớp được khai báo bên trong một lớp khác.Lớp trong truy xuất được lớp ngoài.Lớp ngoài có phải có ít nhất một thành phần là instance của lớp trong và truy xuất các instance này.22Inner class...Cú pháp:class Outter{ . class Inner { }}Lợi ích:Có thể viết code truy xuất lớp ngoài từ lớp trong mà không cần định nghĩa đối tượng lớp ngoàiLớp ngoài muốn truy cập lớp trong thì phải định nghĩa 1 đối tượng lớp trong ( bằng toán tử new )23Lớp nội: Lớp ngoài không thể truy cập trực tiếp lớp trong24Inner class: Lớp ngoài truy cập thành phần là đối tượng thuộc lớp trong, lớp trong truy cập trực tiếp lớp ngoài254.7- Toán tử instanceofToán tử instanceof có 2 toán hạngToán hạng trái: Một đối tượngToán hạng phải: Tên 1 lớpTrả trị:true: Nếu đối tượng thuộc lớp này.false: nếu đối tượng không thuộc lớp này.264.8- Vấn đề ép kiểu trong Javatype castingCopy dữ liệu từ kiểu này sang kiểu khác.Có thể bị tràn số  Phải chú ý khi lập trình.01101101101011010000000000000000011011011010110110101101Chuyển kiểu nhỏ sang kiểu lớn: giữ nguyên trịChuyển kiểu lớn sang kiểu nhỏ: bị tràn số (overflow)000000000010110100101101giữ nguyên trị27Thí dụ về ép kiểuoverflowb, kiểu byte: -128.. 127284.9- Tham số của hàm trong JavaTham số trong hàm (hành vi) chỉ là tham trị.Hàm Swap1 không thể làm thay đổi trị của tham số xx và yyHàm Swap2 hoán vị x, y của dữ liệu của lớp (tầm vực bên ngoài hàm) nên hoán vị sẽ thành công29Thí dụ: Tham số là mảngÔn tập về khai báo mảngTham số là mảng (địa chỉ phần tử đầu) nên hàm xử lý hiệu qủa30Thí dụ: Tham số là đối tượng thì dữ liệu của đối tượng sẽ bị đổi31Bài tậpLàm một hóa đơn có 10 mặt hàng.Viết chương trình minh họa cho thiết kế sau:NgườiTênNămSinhHọcViênđiểm1điểm2điểm3NhânViênLươngNgàyNhậnViệcPBKNhânViênCLCaoTrìnhĐộNgànhNơiĐàoTạoGiáoViênThùLaoGDPhòngBanKhoaMãPBKTênPBKNVQuảnLýPhụCâpCVViết chương trìnhkhởi tạo một sốđối tượng gồm:3 học viên,2 giaó viên3 nhân viên quản lý.Xuất thông tin vềcác đối tượng.32

Các file đính kèm theo tài liệu này:

  • pptbai_giang_lap_trinh_huong_doi_tuong_voi_javachuong_4_9536_2021066.ppt