Object-Oriented Programming Using C#

NGÔN NGỮ LẬP TRÌNH NÂNG CAO

Ver. 1.0

Slide 1 of 25

Object-Oriented Programming Using C#

Mục tiêu

Trong phần này, chúng ta sẽ học: Thực thi hàm tạo (constructors) Thực thi hàm hủy (destructors) Xác định vòng đời một đối tượng Miêu tả đa hình (polymorphism) Thực thi nạp chồng hàm Xác định sự cần thiết nạp chồng toán tử

Ver. 1.0

Slide 2 of 25

Object-Oriented Programming Using C#

Thực thi hàm tạo - Constructors

Một hàm tạo là một kiểu đặc biệt của phương thức mà được gọi khi chúng ta tạo một thể hiện mới của một lớp. Một hàm tạo đươc sử dụng để khởi tạo các thành viên của lớp. Tên của hàm tạo trùng với tên của lớp chứa nó.

Ver. 1.0

Slide 3 of 25

Object-Oriented Programming Using C#

Sự cần thiết của hàm tạo

Một hàm tạo là hàm thành viên đặc biệt của lớp khi một đối tượng của lớp được tạo.

Ver. 1.0

Slide 4 of 25

Object-Oriented Programming Using C#

Các kiểu của hàm tạo

Thể hiển của hàm tạo: Nó được gọi khi một thể hiển của lớp được tạo. Những hàm tạo này được sử dụng để khởi tạo biến thành viên của lớp. Hàm tạo tĩnh: Nó được sử dụng để khởi tạo biến tĩnh của lớp. Những biến này được tạo sử dụng từ khóa static và nó lưu trữ giá trị có thể được chia sẻ bởi tất cả thể hiện của lớp.

Hai kiểu của hàm tạo là:

Ver. 1.0

Slide 5 of 25

Object-Oriented Programming Using C#

Hàm tạo với tham số

Một hàm tạo có thể được chỉnh sửa để chấp nhận giá trị người sử dụng cung cấp khi chương trình chạy. Đối tượng có thể khởi tạo sử dụng hàm tạo mặc định với giá trị mặc định trong chương trình. Nhưng có thể có yêu cầu các biến cần khởi tạo với giá trị người sử dụng cung cấp.

Ver. 1.0

Slide 6 of 25

Object-Oriented Programming Using C#

Thực thi hàm hủy - Destructors

Hàm hủy la phương thức đặc biệt được sử dụng để hủy các thể hiện của lớp trong bộ nhớ. Một lớp chỉ có một hàm hủy. Mục đích của hàm hủy là thực thi giải phóng bộ nhớ. .NET Framework tự động chạy hàm hủy để giải phỏng đối tượng trong bộ nhớ.

Ver. 1.0

Slide 7 of 25

Object-Oriented Programming Using C#

Khai báo hàm hủy - Destructors

Đối tượng đã được hủy Chỉ đối tượng không sử dụng được hủy

Một hàm hủy cùng tên với lớp nhưng có tiền tố dấu ngã ở trước tên hàm hủy~ , Hàm hủy không thể kế thừa và nạp chồng. Bộ thu hồi rác là quá trình tự động giải phóng bộ nhớ của các đối tượng không được sử dụng. Quyết định gọi hàm hủy được tạo bởi mọt chương trình đặc biệt của C# được biết đến như bộ thu hồi rác (garbage collector). Quá trình của bộ thu hồi rác thực thi tự động. Điều này để chắc chắn rằng:

Ver. 1.0

Slide 8 of 25

Object-Oriented Programming Using C#

Khai báo hàm hủy – Destructors (tiếp)

Finalize(): Nó là môt phương thức đặc biệt được gọi từ class chứa nó hoặc từ lớp con. Hàm hủy Finalize() được goi sau khi tham chiếu cuối cùng của đối tượng được giải phóng trong bộ nhớ. Dispose(): Phương thức này được gọi để giải phóng tài nguyên, như là kết nối cơ sở dữ liệu, ngay khi đối tượng sử dụng như là một tài nguyên không sử dụng bây giờ. Giao diện (interface) IDisposable chứa phương thức Dispose(). Do đó, để gọi phương thức Dispose() class phải được thực thi thi từ interface IDisposable.

C# cung các các phương thức sau để giải phóng thể hiện của lớp từ bộ nhớ:

Ver. 1.0

Slide 9 of 25

Object-Oriented Programming Using C#

Xác định vòng đời của một đối tượng

class TestCalculator {

TestCalculator() {

Console.WriteLine("Constructor Invoked");

}

Chúng ta cùng hiểu vòng đời của một đối tượng thông qua ví dụ sau: using System; //Vòng đời của một đối tượng namespace Objects {

Ver. 1.0

Slide 10 of 25

Object-Oriented Programming Using C#

Xác định vòng đời của một đối tượng (tiếp)

~TestCalculator() {

Console.WriteLine ("Destructor Invoked");

} public static void Main(string[] args) {

Hàm hủy tất cả đối tượng được gọi khi bộ thu hồi rác được gọi.

Console.WriteLine("Main() Begins"); TestCalculator Calc1 = new TestCalculator();

Đối tượng Calc1 có phạm vi hàm. Do đó hàm tạo của nó được gọi sau khi hàm Main() bắt đầu.

Ver. 1.0

Slide 11 of 25

Object-Oriented Programming Using C#

{

Console.WriteLine("Inner Block Begins "); TestCalculator Calc2 = new TestCalculator(); Console.WriteLine("Inner Block Ends");

} Console.WriteLine("Main() ends");

}

}

Xác định vòng đời của một đối tượng

}

Đối tượng Calc2 có phạm vi khối. Đó đó, hàm tạo được xử lý sau khi khối nội bộ bắt đầu.

Ver. 1.0

Slide 12 of 25

Object-Oriented Programming Using C#

Xác định vòng đời của một đối tượng

Ver. 1.0

Slide 13 of 25

Object-Oriented Programming Using C#

Giới thiệu về đa hình - Polymorphism

Trong lập trình hướng đối tượng - Object-Oriented Programming (OOPs), đa hình cho phép một giao diện được sử dụng cho nhiều hàm Đa hình giảm sự phức tạp trong các hàm của một lớp trong một chương trình. Đa hình có thể hoặc là tĩnh, hoặc là động.

Ver. 1.0

Slide 14 of 25

Object-Oriented Programming Using C#

Đa hình tĩnh - Static Polymorphism

Đa hình tĩnh đề cập tới một thực thể tồn tại trong nhiều dạng trong cùng một lúc. C# sử dụng hai phương thức để thực thi đa hình tĩnh. Đó là: Nạp chồng hàm: phương pháp này cho phép sử dụng cùng tên cho hai hoặc nhiều hàm. Mỗi định nghĩa lại một hàm phải sử dụng các kiểu của tham số, tuần tự tham số, hoặc số tham số. Nạp chồng toán tử: Phương pháp này cho phép kiểu người dung định nghĩa như là structures và classes để sử dụng nạp chồng toán tử đối với các thao tác dễ dàng của các đối tượng đó.

Ver. 1.0

Slide 15 of 25

Object-Oriented Programming Using C#

Đa hình động - Dynamic Polymorphism

Lớp trừu tượng - Abstract classes: là một kiểu đặc biệt của lớp cơ sở bao gồm các thành viên lớp trừu tượng. Hàm ảo - Virtual functions: Là hàm mà không thực sự tồn tại, tuy nhiên, nó xuất hiện để trình bày một số phần của chương trình.

Trong đa hình động, việc quyết định về hàm được xử lý được tạo trong khi chạy chương trình. Đa hình động có nhiều hữu dụng hơn đa hình tĩnh, nó cung cấp nhiều sự mềm dẻo hơn cho tính toán các đối tượng. C# sử dụng hai phương pháp để thực thi đa hình động:

Ver. 1.0

Slide 16 of 25

Object-Oriented Programming Using C#

Thực thi nạp chồng hàm

Nạp chồng hàm được thực thi bằng cách xác định hai hoặc nhiều hàm trong lớp với cùng tên hàm. Trong nạp chồng hàm, mỗi định nghĩa hàm phải khác nhau chữ ký hàm.

Ver. 1.0

Slide 17 of 25

Object-Oriented Programming Using C#

Chữ ký hàm

Số tham số

Kiểu dữ liệu của tham số Tuần tự tham số

Chữ ký hàm được định nghĩa bởi:

Ver. 1.0

Slide 18 of 25

Object-Oriented Programming Using C#

Nạp chồng hàm tạo

Hàm tạo cũng có thể có tham số, do đó nó có thể nạp chồng. Nạp chồng hàm tạo thường sử dụng trong C# để cung cấp tính mềm dẻo trong khi tạo một đối tượng.

Ver. 1.0

Slide 19 of 25

Object-Oriented Programming Using C#

Nạp chồng toán tử

Nạp chồng toán tử cung cấp thêm khả năng cho toán tử C# khi nó được áp dụng cho kiểu dữ liệu người dùng định nghĩa. Chỉ tập định nghĩa trước của toán tử C# mới được nạp chồng.

Ver. 1.0

Slide 20 of 25

Object-Oriented Programming Using C#

Sự cần thiết phải nạp chồng toán tử

Để sử dụng toán tử với kiểu dữ liệu người dùng định nghĩa, nó cần phải nạp chồng theo yêu cầu người lập trình. Bảng sau miêu tả các toán tử có khả năng nạp chồng trong C#.

Toán tử

Miêu tả

+, -, ! , ~, ++ , --

Những toán tử một ngôi dành cho một toán hạng

+, -, * , /, %

Toán tử hai ngôi dành cho nạp chồng hai toán hạng.

==, !=, <, >, <=, >=

Toán tử so sánh

&&, ||

Toán tử logic không thể nạp chồng trực tiếp, nhưng nó sử

dụng & và | để nạp chồng

+=, -=, *=, /=, %=

Toán tử gán không thể nạp chồng.

Toán tử không thể nạp chồng.

=, ., ?:, ->, new, is, sizeof, typeof

Ver. 1.0

Slide 21 of 25

Object-Oriented Programming Using C#

Ví dụ: Hiển thị ngày tháng sử dụng nạp chồng hàm

Bình phải phát triển một ứng dụng phần mềm cho trường WRU. Ứng dụng sẽ chấp nhận số tháng bởi sinh viên và hiển thị tên tháng bằng chữ và tổng số ngày của tháng đó.

Vấn đề đặt ra:

Ver. 1.0

Slide 22 of 25

Object-Oriented Programming Using C#

Ví dụ: Hiển thị ngày tháng sử dụng nạp chồng hàm (tiếp)

Để phát triển ứng dụng trên. Bình cần thực thi các nhiệm vụ sau: 1. Tạo một ứng dụng console. 2. Dịch và chạy ứng dụng

Giải pháp:

Ver. 1.0

Slide 23 of 25

Object-Oriented Programming Using C#

Tổng kết

Hàm tạo là hàm thành viên của lớp và được gọi khi thể hiện của lớp đó được tạo. Hàm tạo cùng tên với class của nó. Hàm hủy được gọi khi bất kỳ thể hiện của lớp không tồn tại. Hàm hủy cùng tên với class của nó, nhưng có thêm tiền tố ~ (dấu ngã). Hàm tạo là phương thức đặc biệt cho phép điều khiển qua khởi tạo đối tượng. Hàm hủy là phương thức đặc biệt mà sử dụng để thu hồi thể hiện của class từ bộ nhớ. Bộ thu hồi rác (Garbage collection) là quá trình tự động giải phóng bộ nhớ của các đối tượng mà không được sử dụng nữa.

Trong mục này chúng ta đã học:

Ver. 1.0

Slide 24 of 25

Object-Oriented Programming Using C#

Hàm hủy Finalize() được gọi sau khi tham chiếu của đối tượng được giải phóng khỏi bộ nhớ. Hàm Dispose() được gọi khi thu hồi tài nguyên, như là kết nối cơ sở dữ liệu, tài nguyên hiện tại không sử dụng. Thuật ngữ đa hình được lấy từ tiếng Hy Lạp ‘poly’ và ‘morphos’, có nghĩa là ‘nhiều’ và ‘hình dạng’. Đa hình cho phép một giao diện sử dụng nhiều hàm khác nhau. Đa hình tĩnh đề cập tới một thực thể tồn ại theo nhiều hình dạng khác nhau cùng một lúc. Trong đa hình động, việc quyết định hàm nào xử lý được thực thi khi mã được xử lý.

Tổng kết (tiếp)

Ver. 1.0

Slide 25 of 25

Object-Oriented Programming Using C#

Nạp chồng hàm là quá trình sử dụng cùng tên cho hai hoặc nhiều hàm trong trong class. Số tham số, kiểu tham số, thứ tự tham số của hàm được gọi là chữ ký của hàm. Nạp chồng hàm tạo thường sử dụng trong C# để cung cấp tính mềm dẻo trong khi tạo đối tượng. Nạp chồng toán tử cung cấp thêm khả năng cho toán tử C# khi nó được áp dụng cho kiểu dữ liệu người dùng định nghĩa.

Tổng kết (tiếp)

Ver. 1.0

Slide 26 of 25