1. Trang chủ
  2. » Thể loại khác

CHƯƠNG 5: style THỪA KẾ Khoa Công nghệ thông tin Trường Đại học Ngoại ngữ - Tin học, TP.HCM

59 0 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Chương 5: Style Thừa Kế
Trường học Trường Đại học Ngoại ngữ - Tin học, TP.HCM
Chuyên ngành Khoa Công nghệ thông tin
Thể loại Giáo trình
Thành phố TP.HCM
Định dạng
Số trang 59
Dung lượng 534,13 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Vấn đề tái sử dụng code & các hình thức Access modifier: protected Lớp cơ sở của mọi lớp: Lớp object Lớp sealed và lớp partial NỘI DUNG 2... Có 3 hình thức: Sao chép lớp cũ thành 1 l

Trang 1

Click to edit Master subtitle style

Trang 2

Vấn đề tái sử dụng code & các hình thức

Access modifier: protected

Lớp cơ sở của mọi lớp: Lớp object

Lớp sealed và lớp partial

NỘI DUNG

2

Trang 3

Xuất phát từ nhu cầu:

Sử dụng lại những đoạn code có sẵn Hoặc phát triển thêm từ những code có sẵn mà không phải viết lại từ đầu

 Ưu điểm:

Giảm chi phí Nâng cao khả năng bảo trì và khả năng mô hình hóa

Vấn đề tái sử dụng code

3

Trang 4

Lập trình cấu trúc: chương trình con

OOP: nhiều loại đối tượng có thuộc tính, hành

vi tương tự nhau  tái sử dụng các lớp đã viết

Trong một lớp vẫn tái sử dụng phương thức

Vấn đề tái sử dụng code

4

Trang 5

Có 3 hình thức:

Sao chép lớp cũ thành 1 lớp khác

 Hạn chế: Dư thừa, khó quản lý khi có thay đổi

Kết tập (Aggregation): Lớp mới là tập hợp hoặc

sử dụng (không thay đổi) các lớp đã có

Thừa kế (Inheritance): Lớp mới phát triển thêm

các thuộc tính hoặc phương thức từ lớp đã có

Các hình thức tái sử dụng code

5

Trang 6

KẾT TẬP (AGGREGATION)

6

Trang 7

Thành phần lớp mới chứa các đối tượng của lớp cũ

Lớp mới: Lớp chứa/Lớp toàn thể

Sử dụng các thuộc tính và phương thức của lớp thành phần thông qua đối tượng

Lớp cũ: Lớp thành phần

Ví dụ:

Lớp cũ: Điểm (Point) Lớp mới: Tam giác (Triangle) có 3 điểm

Kết tập (Aggregation)

7

Trang 8

Số lượng lớp thành phần trong lớp chứa có thể:

1 số nguyên dương (1, 2, 3, ) Dải số (0 1, 1 n)

Bất kỳ giá trị nào: * Không ghi: mặc định là 1

Ký hiệu quan hệ kết tập

8

Trang 10

Cài đặt lớp Point và lớp Triangle có chức năng:

Nhập Xuất Tính chu vi Tính diện tích

(Mỗi lớp phải có: Property get, set; constructor; kiểm

tra ràng buộc nếu có)

Cài đặt lớp ListTriangle chứa danh sách các Triangle có chức năng: nhập, xuất và cho biết thông tin tam giác có diện tích lớn nhất

Bài tập tại lớp

10

Trang 11

Xây dựng chương trình trò chơi xúc xắc với cách chơi như sau:

Mỗi xúc xắc sẽ có giá trị ngẫu nhiên từ 1 đến 6

Quy định số lần gieo xúc xắc

Hai người lần lượt gieo 1 hạt xúc xắc

Sau mỗi lượt gieo, số điểm của lượt đó được tích lũy vào số điểm của người chơi tương ứng

Sau các lượt gieo theo quy định, người thắng cuộc là người có tổng số điểm lớn hơn

Bài tập ví dụ

11

Trang 12

Xúc xắc (XucXac)

Thuộc tính: giá trị của mặt (giaTri)

Phương thức: sinh ngẫu nhiên giá trị mặt của xúc

xắc (SinhGiaTri())

Người chơi (NguoiChoi)

Thuộc tính: tên (ten), điểm (diem) Phương thức: gieo xúc xắc (GieoXucXac())

Phát hiện lớp và thông tin của lớp

12

Trang 13

Trận đấu (TranDau)

Thuộc tính: xúc xắc (xucXac), 2 người chơi (nguoiChoi), số vòng chơi (soVong), người thắng cuộc (nguoiThang)

Phương thức: bắt đầu (BatDau()), kết thúc (KetThuc), hiển thị thông tin (HienThi()), thực hiện trận đấu (ThucHienTranDau())

Phát hiện lớp và thông tin của lớp

13

Trang 14

Sơ đồ lớp

14

Trang 15

public class XucXac

private int giaTri;

//Định nghĩa Constructor và Property get, set //tại đây …

public void SinhGiaTri()

{

this giaTri = random.Next(1, 7);

}

Trang 16

public class NguoiChoi

private String ten;

private int diem;

//Định nghĩa constructor, property get, set

this diem += xucXac.GiaTri; //get giá trị xucXac

Console Write( " - Diem hien tai = " + this diem); }

Trang 17

public class TranDau

private XucXac xucXac;

private NguoiChoi nguoiChoi1;

private NguoiChoi nguoiChoi2;

private NguoiChoi nguoiThang;

private int soVong;

//Định nghĩa constructor, property get, set tại đây

public void BatDau()

{

Console WriteLine( "Tran dau bat dau " );

for ( int i = 1; i <= this soVong; i++) {

Console WriteLine( "***** Vong {0} *****" , i);

Console WriteLine(nguoiChoi1 Ten + " gieo xuc xac" ); nguoiChoi1.GieoXucXac(xucXac);

Console WriteLine(nguoiChoi2 Ten + " gieo xuc xac" ); nguoiChoi2.GieoXucXac(xucXac);

} }

Trang 18

public class TranDau

public void KetThuc()

{

int diem1 = nguoiChoi1 Diem ;

int diem2 = nguoiChoi2 Diem ;

if (diem1 > diem2)

this nguoiThang = this nguoiChoi1;

else if (diem2 > diem1)

this nguoiThang = this nguoiChoi2; }

Trang 19

public class TranDau

public void HienThi()

{

Console WriteLine( "*** Ket qua tran dau ***" );

Console WriteLine( "- Diem cua {0}: {1}" , nguoiChoi1 Ten ,

Trang 20

Hãy viết lại các lớp trong Bài tập ví dụ trên để thoả yêu cầu sau:

Có thêm thuộc tính soBanThang ghi lại số bàn

thắng Cho biết số ván đấu (>2), nếu người chơi nào thắng quá bán đầu tiên thì sẽ thắng

VD: Giả sử 2 người chơi phải chơi 3 ván đấu Nếu người chơi nào thắng trước 2 ván thì người chơi đó thắng cả trận đấu

Nếu hòa thì tính điểm để kết luận người thắng

Bài tập về nhà

20

Trang 21

THỪA KẾ

21

Trang 22

Đóng gói (Encapsulation ) và Giao diện ( Interface )

Ẩn chi tiết của lớp (Đóng gói), chỉ cung cấp các phương thức cần thiết để dùng (Giao diện)

3 nguyên tắc lập trình hướng đối tượng

22

Trang 23

Tạo lớp mới bằng cách phát triển từ lớp đã có

Lớp mới thừa kế những thành viên đã có trong lớp

Lớp cũ: Lớp cha (superclass), lớp cơ sở (baseclass) Lớp mới: Lớp con (subclass), lớp dẫn xuất (derived class)

Thừa kế (Inheritance)

23

Trang 24

Lớp cơ sở

Lớp tổng quát hơn trong mối quan hệ “is-a”

Có cùng tập thuộc tính và hành vi Lớp dẫn xuất

Lớp cụ thể hơn trong một quan hệ “is-a”

Trang 25

Ký hiệu kế thừa

Trang 26

Lớp Student thừa kế Person

Lớp Student tái sử dụng mọi thứ của lớp Person

Mọi thay đổi của lớp Person sẽ tự động thay đổi trong lớp

Student

Ví dụ

26

Trang 27

Ví dụ: Tam giác vuông là một

loại tam giác

Ví dụ: Tam giác có 3 đỉnh

Trang 28

Đơn kế thừa (single inheritance): chỉ có một lớp cha

Đa kế thừa (multiple inheritance): có nhiều lớp cha

Các dạng kế thừa

28

Trang 30

LỚP CƠ SỞ

30

Trang 31

Lớp cơ sở (base class, superclass, parent class)

là bất kỳ lớp thông thường nào mà được dùng

cho lớp khác thừa kế

Lớp cơ sở

class Person

{

public string Email { get; set; }

public string Name { get; set; }

31

Trang 32

LỚP DẪN XUẤT

32

Trang 33

Lớp dẫn xuất (derived class, subclass, child class)

là lớp dựa trên hay mở rộng một lớp khác

Lớp dẫn xuất

Lớp Student dẫn xuất từ lớp Person Lớp Student thừa kế từ lớp Person

33

Trang 34

Tạo lớp dẫn xuất

Lớp dẫn xuất

class Student : Person

{ //

} class Student : Person

{ public string StudentID { get; set; }

public Student(string studentID) {

StudentID = studentID;

Name = "NA";

Email = "NA";

} }

34

Trang 36

SỬ DỤNG LỚP DẪN XUẤT

36

Trang 37

Sử dụng lớp dẫn xuất

Person person = new Person(“Khánh Phương”);

Student student = new Student(“15TH123456”);

Person person = new Student(“15TH123456”);

37

Trang 38

Ví dụ:

int x = 20.5; //error?

Upcasting: đối tượng lớp dẫn xuất được nhìn

nhận như đối tượng lớp cơ sở: Thực hiện tự động

Downcasting: đối tượng lớp cơ sở được nhìn

nhận như đối tượng lớp dẫn xuất: Phải ép kiểu

Kiểm tra kiểu và ép kiểu (casting)

38

Trang 39

person là một Student có mã 15TH123456

nhưng lại dùng như Person

Để kiểm tra đối tượng có kiểu gì: từ khóa is

Kiểm tra kiểu và ép kiểu (casting)

Person person = new Student(“15TH123456”);

Person person = new Student(“15TH123456”);

if (person is Student) {

Student student = (Student) person;

// Làm những gì chúng ta muốn với student }

39

Trang 40

Thay vì ép kiểu, có một cách khác để chuyển

một kiểu đối tượng sang kiểu khác :

Dùng từ khóa ‘as

Từ khóa ‘as’

Person person = new Student (“15TH123456”);

Student student = person as Student;

40

Trang 42

So sánh casting và as

Từ khóa ‘as’

Person person = new Teacher();

Student = (Student) person;

Person person = new Teacher();

Student = person as Student;

Trang 43

Một thuận lợi là chúng ta có thể tạo một mảng

của lớp cơ sở, và đặt bất kỳ lớp dẫn xuất nào

vào đó

Dùng thừa kế trong mảng

Person [] people = new Person [5];

people[3] = new Student(“15TH123456”);

people[4] = new Teacher();

43

Trang 44

CONSTRUCTOR VÀ THỪA KẾ

44

Trang 45

Lớp dẫn xuất sẽ thừa kế

Fields Methods, Properties, Indexers, Events

Lớp dẫn xuất không thừa kế constructor

Không thể dùng constructor của lớp cơ sở để tạo lớp dẫn xuất

Chúng ta phải tự tạo constructor của lớp dẫn xuất

Constructor trong thừa kế

45

Trang 46

Khi lớp dẫn xuất định nghĩa constructor, nó cần gọi một trong những constructor của lớp cơ sở

Mặc định, constructor của lớp dẫn xuất gọi constructor không tham số của lớp cơ sở

Constructor trong thừa kế

46

Trang 47

Tình huống:

Nếu lớp cơ sở Không có constructor không tham số Constructor của lớp dẫn xuất muốn gọi constructor khác (không phải constructor không tham số)

Giải pháp: Dùng từ khóa “base

Constructor trong thừa kế

47

Trang 48

Constructor trong thừa kế

{ StudentID = studentID }

// … }

48

Trang 49

ACCESS MODIFIER: PROTECTED

49

Trang 50

Đã học, thành viên lớp:

private public

Khi thừa kế, chúng ta có thêm

Trang 51

LỚP OBJECT

51

Trang 52

Bất kỳ lớp nào chúng ta tạo ra đều dẫn xuất từ

một lớp đặc biệt: lớp object

Lớp object: Lớp cơ sở của mọi lớp (trực tiếp

hay gián tiếp)

Có thể dùng lớp object để lưu lớp dẫn xuất

Lớp object

object student = new Student(“15TH123456”);

52

Trang 53

Trả về chuỗi biểu diễn (mô tả) đối tượng

double x, y;

… public override ToString() {

return “(” + x + “,” + y + “)”;

} }

53

Trang 54

LỚP SEALED VÀ LỚP PARTIAL

54

Trang 55

Có lúc cần ngăn cản một lớp cho thừa kế

Trang 56

Đôi lúc một lớp trở nên lớn

Chia lớp thành các lớp nhỏ hơn Chia lớp thành nhiều file hay nhiều section (dùng

public partial class Something {

public void DoSomethingElse {

} }

56

Trang 57

Thiết kế các lớp cần thiết (áp dụng kỹ thuật kế thừa) để quản lý thông tin của một giảng viên và sinh viên

Đối với sinh viên gồm các thông tin và hành vi:

Họ tên Tuổi Tên trường học

Số tín chỉ đã tích luỹ Cập nhật số tín chỉ Hiển thị thông tin

Bài tập

57

Trang 58

Đối với giảng viên gồm các thông tin và hành vi:

Họ tên Tuổi

Tên trường công tác Học vị

Hệ số lương Mức lương cơ bản Hiển thị thông tin

Bài tập …

58

Trang 59

Thừa kế là cách tái sử dụng code bằng cách mở rộng lớp cơ

sở thành lớp cụ thể (lớp dẫn xuất)

Lớp dẫn xuất thừa kế các thành viên của lớp cơ sở (trừ

private)

Fields Methods, Properties, …

và lớp dẫn xuất cũng có thể truy cập

ĐIỂM CHÍNH

59

Ngày đăng: 24/06/2023, 16:43

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w