1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Kỹ thuật lập trình: Chương 4 - ThS. Phạm Thanh An

74 463 1

Đ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 4 - ThS. Phạm Thanh An
Tác giả ThS. Phạm Thanh An
Trường học Đại học Ngân hàng Tp. Hồ Chí Minh
Chuyên ngành Kỹ thuật lập trình
Thể loại Bài giảng
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 74
Dung lượng 541,19 KB

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

Nội dung

Bài giảng Kỹ thuật lập trình: Chương 4 - ThS. Phạm Thanh An

Trang 1

Chương 4: Kế thừa và Đa hình

( Inheritance and Polymorphism )

ThS Phạm Thanh An

Khoa công nghệ thông tin Đại học Ngân hàng Tp Hồ Chí Minh

Trang 2

Nội dung trình bày

Trang 3

Mục tiêu

tượng trong thế giới thực

này trong chương trình

Trang 4

Đặc biệt hóa và tổng quát hóa

Động vật có vú

Chó

Lớp cơ sở (Base class)

Lớp dẫn xuất (Derived class)

Khái quát hóa

(Generalization)

Đặc biệt hóa

(Specialization)

Trang 5

Kế thừa

được cài đặt thông qua kế thừa.

báo một lớp mới dựa trên lớp đã tồn tại

Người

Khách hàng Sinh viên Công nhân

Trang 6

Kế thừa (tt)

khác ta sử dụng dấu “:” theo sau là tên

lớp được kế thừa.

public class Sinhvien : Nguoi

Trang 7

như một đối tượng của lớp cơ sở của nó

như là một đối tượng của bất kỳ lớp dẫn xuất nào

(kế thừa không tường minh)

Trang 8

Kế thừa (tt)

phần không là private (non-private) của lớp

cơ sở, bao gồm tất cả các phương thức và biến thành viên

thiết lập ở lớp cơ sở

Trang 9

Ví dụ 1 : kế thừa

Animal

Cat

Trang 10

Ví dụ 2: kế thừa

public class Nguoi

{ private string ten;

private string quequan; // etc

public string Ten { get { return ten;}

set { ten = value;}

} public string quequan

{ get { return quequan; } set { quequan = value; } }

public void Chaohoi(){

MessageBox.show (“Xin chao từ lớp Nguoi”);

Trang 11

Ví dụ 2: kế thừa (tt)

public class Sinhvien : Nguoi

{ private string sinhvienid;

public int lop;

public string Sinhvienid

Trang 12

Ví dụ: kế thừa

Trang 13

Square squareObj =new Square();

Rectangle rectObj =new Rectangle();

public int length;

public int breadth;

public void calculateArea(int len, int

public Rectangle() {

length=0;

breadth=0;

} public void calculateArea(int len, int breadth) {

Console.W riteLine ("Area of a Rectangle is

{0}",len*breadth); }

}

Trang 15

Bổ từ truy cập “protected”

thức chỉ có thể được truy cập:

thức được khai báo

Trang 16

Từ khóa base

của lớp cơ sở từ trong lớp dẫn xuất

của lớp cơ sở trong phương thức thiết khi tạo ra một thể hiện của lớp dẫn xuất

phương thức static sẽ báo lỗi

Trang 17

Ví dụ 1: Từ khóa base

Trang 18

Ví dụ 2 : Sử dụng từ khóa base

using System;

public class Window

{

private int top;

private int left;

public Window( int top, int left) {

this.top = top;

this.left = left;

} public void DrawWindow() {

Console.WriteLine(“Drawing Window at {0}, {1}”, top, left);

Trang 19

Ví dụ : Sử dụng từ khóa base

public class ListBox: Window

{

private string mListBoxContents;

public ListBox(int top, int left, string theContents) : base(top, left)

// gọi phương thức thiết lập của lớp cơ sở {

mListBoxContents = theContents;

} public new void DrawWindow()

{ base.DrawWindow();

Console.WriteLine(“ ListBox write: {0}”, mListBoxContents);

} }

Trang 21

Phương thức thiết lập lớp dẫn xuất

tiên đều gọi phương thức thiết lập mặc định của lớp cơ sở (phương thức thiết

lập không có tham số).

với từ khóa base.

Trang 22

Phương thức thiết lập lớp dẫn xuất

public class A

{

public A (int n) {

…}

……

}

public class B : A {

public B (int n) : base (n) {

… }

……

}

Trang 23

Từ khóa sealed

nhất lớp cơ sở trực tiếp (Đơn kế thừa)

một lớp không cho các lớp khác kế thừa

public sealed class A {

… } public class B : A //Compiler error {

… }

Trang 24

Từ khóa new

một cách tường minh các thành phần được kế thừa từ lớp cơ sở

override trên cùng một phương thức

Trang 25

Ví dụ: từ khóa new

Trang 26

Từ khóa override

đặt mới của phương thức lớp cơ sở, phương

thức lớp cơ sở phải khai báo là virtual

sở không thể được thay đổi bởi phương thức override ở lớp kế thừa

new, static, virtual không thể sử dụng cùng với bổ

từ override.

Trang 27

//new modifier required

new public static int val = 456;

public static void Main() {

//will execute derived class variable Console.WriteLine (val);

} }

Trang 28

Ghi đè phương thức (Method Overriding)

cơ sở:

kế thừa với cùng tên

Trang 29

public static void Main() {

StringAddition objStringAddition = new StringAddition(); objStringAddition.add();

} }

Trang 30

Ví dụ : sử dụng từ khóa new

Trang 31

Ví dụ:

using System;

class A

{ public void F() { Console.WriteLine("A.F"); } public virtual void G() { Console.WriteLine("A.G"); } }

class B: A

{ new public void F() { Console.WriteLine("B.F"); } public override void G() { Console.WriteLine("B.G"); } }

Trang 33

public virtual void Foo() { Console.WriteLine("Base.Foo");

} }

Trang 34

Đa hình

Trang 35

public virtual int MethodB() {

return(10);

} public int MethodC() {

return(20);

} }

Trang 36

public static void Main() {

Child ObjChild = new Child();

Console.WriteLine("The output is " +ObjChild.MethodA()); }

Trang 37

Đa hình

nhiều và morph có nghĩa là hình dạng

(form)

sử dụng nhiều hơn 1 kiểu,

 nó có thể là kiểu của chính lớp đó,

 hay cũng có thể là kiểu lớp cơ sở.

Trang 38

Đa hình

nhiều dạng của một kiểu mà không quan tâm tới chi tiết

có thể thao tác trên nhiều đối tượng của

nhiều lớp khác nhau

Trang 39

Tạo một phương thức đa hình

chúng ta khai báo phương thức này là virtual trong lớp cơ sở

đa hình này thêm từ khóa override

 Thuộc tính không có hỗ trợ đa hình

 Chỉ có phương thức, sự kiện, Property hỗ trợ đa hình

Trang 40

Từ khóa virtual

trợ đa hình

phương thức virtual sử dụng từ khóa

override

Trang 41

protected int left;

public Control( int top, int left ) { this.top = top;

this.left = left; } public virtual void DrawWindow( ) {

Console.WriteLine( “Vẽ Control tại {0}, {1}", top, left ); }

} // Kết thúc lớp Control

Trang 42

Ví dụ: cài đặt đa hình

public class ListBox : Control

{

private string listBoxContents;

public ListBox( int top, int left, string contents ): base(top, left) {

listBoxContents = contents;

} public override void DrawWindow( )

Trang 43

Ví dụ: cài đặt đa hình

public class Tester {

static void Main( )

{ Control win = new Control( 1, 2 );

ListBox lb = new ListBox( 3, 4, "Stand alone list box" ); win DrawWindow( );

lb.DrawWindow( );

Control[] win Array = new Control[3];

win Array[0] = new Control( 1, 2 );

win Array[1] = new ListBox( 3, 4, "List box in array" ); for ( in t i = 0; i < 2; i++ )

{ win Array[i].DrawWindow( ); }

} // end hàm main

} //end class Tester } // kết thúc namespace

Trang 44

Các điểm ghi nhớ

mình

được gọi tại thời điểm thực thi

đến lượt phương thức virtual lại cần đến overriding

Trang 45

Ví dụ: Cài đặt đa hình (tt)

abstract public class Shape

{

public vitual void Draw()

{ Console.WriteLine( “Lop co so”);

{ Console.WriteLine("Drawing the Circle");

}

Trang 46

Ví dụ: Cài đặt đa hình (tt)

public class line : Shape

{ public line() { } public override void Draw()

{ Console.WriteLine("Drawing the Line");

}

public class Rectangular : Shape

{ public Rectangular() { } public override void Draw()

{ Console.WriteLine("Drawing the Rectangular ");

Trang 47

Các lớp trừu tượng

được kế thừa, những không thể tạo ra đối tượng của lớp.

trong định nghĩa lớp.

phương thức trừu tượng.

Trang 48

Các lớp trừu tượng (tt)

đặt chỉ có khai báo

cài đặt phương thức trừu tượng

Trang 49

Ví dụ: lớp trừu tượng

using System;

abstract class BaseClass

{

public abstract void MethodA();

public void MethodB()

Trang 51

Gốc của tất cả các lớp: Lớp Object

liệu nào thì cũng được dẫn xuất từ lớp

System.Object, bao gồm cả các kiểu dữ liệu giá trị

xuất

các lớp dẫn xuất xa hơn nữa,

hay một kiến trúc phân cấp

Trang 52

Gốc của tất cả các lớp: Lớp Object

Multicast Delegate Class2

Class3

Object

Enum1

Structure1 Enum

Primitive types

Boolean

Byte Int16

Int32

Single Double

Decimal DateTime

System-defin ed types

User-defin ed types

Delegate1

Trang 53

Gốc của tất cả các lớp: Lớp Object

Trang 54

Các lớp lồng nhau (Nesting Classes)

viên này có thể là một lớp khác có kiểu do người dùng định nghĩa (user-defined type)

lớp bên ngoài, và chức năng của các lớp đó như

là lớp trợ giúp (helper class)

trong các lớp ngoài (outer class)

Trang 55

Các lớp lồng nhau (Nesting Classes)

 Các lớp được định nghĩa bên trong gọi là các lớp lồng (nested class), và lớp chứa được gọi đơn giản là lớp ngoài.

 Những lớp lồng có khả năng truy cập đến tất cả các thành viên của lớp ngoài

 Một phương thức của lớp lồng có thể truy cập đến

biến thành viên private của lớp ngoài.

 Lớp lồng bên trong có thể ẩn đối với tất cả các lớp

khác, lớp lồng có thể là private cho lớp ngoài.

Trang 56

 khi đó lớp bên ngoài hành động ít nhiều

giống như một namespace

 Thông thường, các lớp lồng hành động như

là các lớp trợ giúp cho lớp chứa, và không được thiết kế cho thế giới bên ngoài.

Trang 57

private int numerator;

private int denominator;

public Fraction( int numerator, int denominator)

{ this.numerator = numerator;

this.denominator = den ominator;

}

public override string ToString()

{ return String.Format( "{0}/{1}", numerator, denominator ); }

Trang 58

Console.WriteLine( "Drawing the denominator: {0}", f.denominator );

}

} }

Trang 60

Ví dụ:

Trang 61

Style

Point

Trang 62

Ví dụ : Car

Trang 63

Ví dụ (tt)

public class Car

{

// Aggregation uses instance of class outside of this class

protected Door FrontRight;

protected Door FrontLeft;

protected Door RearRight;

protected Door RearLeft;

// inner class used to create objects // that are intrinsically linked to the class car

protected class Engine

{ public int horsePower;

}

protected class Battery

{ public int voltage;

}

Trang 64

Ví dụ (tt)

//Composition uses instances of objects of inner classes

protected Engine TheEngine;

protected Engine The Battery;

public Car () {

TheEngine = new Engine ();

TheBattery = new Battery ();

Trang 65

được đặt lên hàng đầu

lớp, các thuộc tính, các phương thức của lớp

giao diện của lớp và cài đặt lớp

truy cập bởi người sử dụng lớp, có nghĩa làcác thành phần public

đoạn code bên ngoài lớp tương tác với các đốitượng của lớp

Trang 66

Interface (tt)

public interface IFile

{ int delFile();

void disFile();

}

public class MyFile : IFile

{ public int delFile() {

System.Console.WriteLine ("DelFile Implementation!"); return(0);

} public void disFile() {

System.Console.WriteLine ("DisFile Implementation!");

Trang 67

Interface (tt)

tượng tinh khiết

thức, các thuộc tính, events sẽ được cài đặt

bởi một số lớp

đề, không có bất kỳ cài đặt nào

thành phần được khai báo trong Interface

Trang 69

Ví dụ (tt)

public class MyFile : BaseforInterface, IFile

{ public int delFile() {

System.Console.WriteLine ("DelFile Implementation!");

return(0);

} public void disFile() {

System.Console.WriteLine ("DisFile Implementation!"); }

}

Trang 70

Interface (tt)

và có thể cài đặt nhiều interface

public interface IFileTwo

{ void applySecondInterface();

}

Trang 71

Interface (tt)

public class MyFile : BaseforInterface, IFile, IFileTwo

{ public int delFile() {

System.Console.WriteLine ("DelFile Implementation!"); return(0);

} public void disFile() {

System.Console.WriteLine ("DisFile Implementation!"); }

public void applySecondInterface() {

System.Console.WriteLine ("ApplySecondInterface Implementation!");

} }

Trang 72

Cài đặt Interface tường minh

public interface IFile

{ int delFile();

void disFile();

}

public interface IFileTwo

{ void applySecondInterface();

void disFile();

 Sử dụng khi hai phương thức cùng chung một tên

ở trong 2 interfaces.

Trang 73

Cài đặt Interface tường minh (tt)

public class MyFile : BaseforInterface, IFile, IFileTwo

Trang 74

Q&A

Ngày đăng: 27/05/2014, 14:58

TỪ KHÓA LIÊN QUAN

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