Click to edit Master subtitle style Click to edit Master subtitle style CHƯƠNG 2:

LỚP VÀ ĐỐI TƯỢNG

Khoa Công nghệ thông tin Trường Đại học Ngoại ngữ - Tin học, TP.HCM

1

NỘI DUNG

• Tạo Lớp

– Thêm Field

– Thêm Constructor

– Thêm Phương thức (method/function)

• Tạo đối tượng

• Từ khóa ‘static’

• Mảng đối tượng

2

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

3

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

• Đó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)

• Thừa kế (Inheritance)

– Tạo lớp mới thừa kế lớp đã có

• Đa hình (Polymorphism)

– Khả năng tạo ra các lớp dẫn xuất, cài đặt cùng một method của lớp cơ sở theo những cách 4 khác nhau (tùy từng lớp dẫn xuất)

TẠO LỚP

5

Tạo lớp

• Lớp (class) dùng để mô hình các đối tượng thực thành các đối tượng trong chương trình

(fields)

(methods)

• Lớp (class) gồm có: – Dữ liệu (dùng biến) – Phương thức – Cách tạo đối tượng

(constructors)

6

Tạo lớp

• Cú pháp:

[access modifier] class [:BaseClassName] {

// Khai báo biến (Fields) [access modifier] VarName;

// Constructors [public] ClassName([Parameters]) {}

// Phương thức (Methods) [access modifier] MethodName([Parameters]) {}

}

7

Tạo lớp

8

Tạo lớp

9

Tạo lớp

10

Tạo lớp

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace CreatingClass { class Book { } }

11

Thêm instance variable (field)

• Bước 1: Thêm các biến (field) vào lớp – Giả sử lớp Book chứa các thông tin: tựa

sách, tác giả, số trang, số từ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace CreatingClass { class Book { private string title; private string author; private int pages; private int wordCount; } }

12

Thêm instance variable (field)

• Giải thích:

– Các field là các biến cục bộ (local variable) – Các field có thể truy cập (dùng hoặc thay đổi)

mọi nơi trong lớp • Từ các Phương thức trong lớp • Từ các Constructors

– Access Modifier của Field

• private: field được truy cập trong lớp, ngoài lớp

không truy cập được

• public: field được truy cập mọi nơi, kể cả ngoài lớp

13

Thêm các constructors

• Bước 2: Cho biết cách tạo đối tượng

– Xem xét lại các field: Khi đối tượng tạo ra,

field nên có giá trị gì thì hợp lý?

– Ví dụ:

• Khi tạo 1 quyển sách mà không có title được

không?

• Khi tạo 1 quyển sách, phần lớn một quyển sách có

thông tin thông thường gì?

• Khi tạo 1 quyển sách, chúng ta muốn cung cấp đầy

đủ thông tin không?

14

Thêm các constructors

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

class Book {

namespace CreatingClass {

private string title; private string author; private int pages; private int wordCount;

public Book(string title) {

this.title = title;

}

}

}

15

Thêm các constructors

• Giải thích:

– public access modifier: Muốn người ngoài lớp

có thể tạo đối tượng Book.

– Constructor giống method, nhưng có 2 khác

biệt: • Tên constructor giống tên lớp (Book) • Không có kiểu trả về

– Nếu không viết constructor thì trình biên dịch sẽ tạo cho chúng ta constructor không tham số

public Book() { }

16

Từ khóa ‘this’

namespace CreatingClass { class Book {

private string title; private string author; private int pages; private int wordCount;

public Book(string title) {

this.title = title;

}

} }

17

Từ khóa ‘this’

• Phạm vi của biến (variable scope)?: Là

những nơi trong chương trình mà biến có thể truy cập

– Class scope: Truy cập trong cả lớp

– Method scope: Truy cập trong method

– Block scope: Truy cập trong khối

18

Từ khóa ‘this’

• Name hiding

class Book {

private string title; private string author; private int pages; private int wordCount;

public Book(string title)

Console.Write(title);

{ } }

19

Từ khóa ‘this’

• Giải quyết vấn đề Name hiding: Có 3 cách

– Đặt tên tham số khác với tên field – Tên field bắt đầu là m_ (member):

• m_title, • m_author, …

– Dùng từ khóa ‘this’

• Đặt tên field và tên tham số giống nhau (name hiding

xảy ra)

• Dùng từ khóa this khi muốn tham chiếu đến field

20

Từ khóa ‘this’

• Từ khóa ‘this’

– this tham chiếu đến đối tượng hiện tại mà

chúng ta đang ở trong đó

– Khi ở trong lớp, có thể truy cập mọi thành viên

(field và method) của lớp thông qua this • Ví dụ: this.title, this.MethodName()

– Cách dùng this

• Thông thường không cần dùng this • Khi name hiding xảy ra, dùng this để truy cập đến

field của lớp

21

class Book {

private string title; private string author; private int pages; private int wordCount;

public Book(string title) {

this.title = title;

}

public Book(string title, string author) {

this.title = title; this.author = author;

}

public Book(string title, string author, int pages, int

this.title = title; this.author = author; this.pages = pages; this.wordCount = wordCount;

}

wordCount) { }

22

Thêm Methods

• Bước 3: Hình dung lớp cần cung cấp những

chức năng gì (method nào)?

• Ví dụ: Người dùng lớp Book có muốn

– Truy cập lấy title của Book? – Gán title khác cho Book? – Gán số từ cho Book dựa trên nội dung cung cấp,

…?

23

Thêm Methods

class Book { private string title; private string author; private int pages; private int wordCount; …

public string GetTitle() { return title; }

public void SetTittle(string title) { this.title = title; }

public void SetWordCoutFromText(string text) { wordCount = text.Split(' ').Length; } }

24

Thêm Methods

• Giải thích:

– Access Modifier của method:

• public: người dùng ở ngoài lớp có thể gọi phương

thức

• private: Phương thức chỉ được gọi bên trong lớp

– Phương thức bắt đầu Get, Set • Get: Phương thức trả về giá trị • Set: Phương thức gán giá trị (thường kiểm tra giá trị

trước khi gán)

25

TẠO ĐỐI TƯỢNG

26

Tạo đối tượng

class Program { static void Main(string[] args) { Book book = new Book("Mindset", "Carol Dweck");

Console.WriteLine(book.GetTitle());

book.SetTittle("Mindset: How You Can Fulfil Your

Potential"); Console.WriteLine(book.GetTitle()); } }

27

TỪ KHÓA ‘static’

28

Từ khóa ‘static’

• Thành viên được đánh dấu static

(objects/instances)

• Static variable

– Thành viên này không thuộc đối tượng (object/instance) – Thành viên được shared cho các đối tượng

class Something {

public static int sharedNum;

}

– Biến được đánh dấu static phía trước – Biến này shared cho các đối tượng – Dùng tên lớp để truy cập biến

29

Từ khóa ‘static’

• Static method

– Method được đánh dấu static phía trước – Gọi Method không cần tạo đối tượng – Dùng tên lớp để gọi method – Trong static method, không được truy cập

instance variable

class Something {

public static void SharedMethod() { }

}

30

Từ khóa ‘static’

• Static class

– Class được đánh dấu static phía trước – Tất cả member đều phải là static – Thường dùng để tạo các method tiện ích • Ví dụ 1: Lớp Console, Console.WriteLine() • Ví dụ 2:

static class Something {

public static int shareNumber;

public static void SharedMethod() {

}

}

31

Từ khóa ‘static’

• Static constructor

– Constructor được đánh dấu static phía trước – Dùng để khởi tạo các biến static – Hàm static constructor được chạy khi lần

đầu tiên dùng lớp

class Something {

public static int sharedNumber;

static Something() {

sharedNumber = 8;

}

}

32

CLASS ACCESS MODIFIER

33

Class access modifier

• Lớp (class) có 2 access modifier:

– internal: Lớp chỉ được dùng trong 1 project

hay 1 assembly

– public: Lớp được dùng trong các project hay

các assembly

internal class Something { }

public class Something { }

class Something { }

34

Bài tập

Cho bài toán đăng ký học phần (DangKyHP). Hãy thiết kế lớp đối tượng theo yêu cầu sau: • Thông tin đối tượng “học phần” (HocPhan): Mã học phần, tên học phần, số lượng đăng ký tối đa và số lượng đăng ký hiện tại

• Chức năng: Cho phép người dùng đăng ký một SV vào lớp, hủy đăng ký một SV và hiển thị thông tin học phần, sao cho: • Thông báo “không thể đăng ký” nếu số đăng

ký đã bằng định mức

• Thông báo “không thể hủy đăng ký” nếu

chưa có sinh viên nào đăng ký

35

MẢNG ĐỐI TƯỢNG

36

Mảng đối tượng

• Khai báo thuộc tính

ClassName[] arrayName;

• Tạo mảng đối tượng

arrayName = new ClassName[size];

• Trong đó:

• ClassName: Tên lớp mà đối tượng được tạo ra • arrayName: Tên mảng đối tượng • size: Kích thước • Các phần tử sẽ mang giá trị null

37

Mảng đối tượng

• Tạo mới phần tử thứ i trong mảng đối

tượng arrayName[i] = new ClassName();

!!!Số lần khởi tạo đối tượng là số lượng mảng

(dùng vòng lặp)

38

Bài tập về nhà

Bổ sung vào chương trình đăng ký học phần một lớp quản lý học phần (MangHocPhan) bao gồm các chức năng: • Tạo danh sách các học phần được mở gồm các

thông tin được người dùng nhập từ bàn phím

• Cho phép đăng ký thêm một sinh viên cho một học phần trong danh sách học phần có sẵn. Mỗi lần đăng ký xong, hỏi lại người dùng có tiếp tục không

• Cho phép hủy đăng ký một sinh viên của một học phần nào đó. Mỗi lần hủy đăng ký xong, hỏi lại người dùng có tiếp tục không

• Hiển thị thông tin học phần nếu người dùng không

muốn tiếp tục

39

ĐIỂM CHÍNH

• Lớp nên nằm trong một file riêng (C#

không bắt buộc)

• Cách tạo lớp, các phần trong lớp gọi là

member – Thêm field – Thêm constructor – Thêm method

• Access modifier của field và method

– private – public

• Access modifier của class

– internal

– public

• Khái niệm name hiding và từ khóa ‘this’

• Tạo và sử dụng mảng đối tượng

40