lỚp vÀ ĐỐi tƯỢng -...

35
Click to edit Master subtitle style Click to edit Master subtitle style 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 CHƯƠNG 2: 1

Upload: doanxuyen

Post on 07-May-2018

220 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

Click to edit Master subtitle style Click to edit Master subtitle style

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

CHƯƠNG 2:

1

Page 2: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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’

NỘI DUNG

2

Page 3: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

3 NGUYÊN TẮC LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

3

Page 4: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

Đó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 khác nhau (tùy từng lớp dẫn xuất)

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

4

Page 5: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

TẠO LỚP

5

Page 6: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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 Lớp (class) gồm có:

Dữ liệu (dùng biến) (fields) Phương thức (methods) Cách tạo đối tượng (constructors)

Tạo lớp

6

Page 7: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

Cú pháp:

Tạo lớp

[access modifier] class <ClassName>[:BaseClassName] { // Khai báo biến (Fields) [access modifier] <type> VarName; // Constructors [public] ClassName([Parameters]) {} // Phương thức (Methods) [access modifier] <type> MethodName([Parameters]) {} }

7

Page 8: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

Ví dụ: Tạo lớp Book để mô hình quyển sách Trong Visual Studio

Click phải lên tên Project Chọn Add → Class … Nhập tên lớp: Book

Tạo lớp

8

Page 9: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

Tạo lớp

9

Page 10: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

Tạo lớp

10

Page 11: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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

Page 12: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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ừ

Thêm instance variable (field)

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

Page 13: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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

Thêm instance variable (field)

13

Page 14: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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?

Thêm các constructors

14

Page 15: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

Thêm các constructors 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; public Book(string title) { this.title = title; } } }

15

Page 16: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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ố

Thêm các constructors

public Book() { }

16

Page 17: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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

Page 18: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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

Từ khóa ‘this’

18

Page 19: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

Name hiding

Từ khóa ‘this’

class Book { private string title; private string author; private int pages; private int wordCount; public Book(string title) { Console.Write(title); } }

19

Page 20: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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

Từ khóa ‘this’

20

Page 21: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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

Từ khóa ‘this’

21

Page 22: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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 wordCount) { this.title = title; this.author = author; this.pages = pages; this.wordCount = wordCount; } }

22

Page 23: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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, …?

Thêm Methods

23

Page 24: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

Thêm Methods

24

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; } }

Page 25: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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)

Thêm Methods

25

Page 26: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

TẠO ĐỐI TƯỢNG

26

Page 27: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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

Page 28: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

TỪ KHÓA ‘STATIC’

28

Page 29: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

Thành viên được đánh dấu static 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 (objects/instances)

Static variable 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

Từ khóa ‘static’

class Something { public static int sharedNum; }

29

Page 30: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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

Từ khóa ‘static’

class Something { public static void SharedMethod() { } }

30

Page 31: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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:

Từ khóa ‘static’

static class Something { public static int shareNumber; public static void SharedMethod() { } }

31

Page 32: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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

Từ khóa ‘static’

class Something { public static int sharedNumber; static Something() { sharedNumber = 8; } }

32

Page 33: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

CLASS ACCESS MODIFIER

33

Page 34: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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

Class access modifier

internal class Something { }

public class Something { }

class Something { }

34

Page 35: LỚP VÀ ĐỐI TƯỢNG - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-02.Lop-va-Doi... · Ví dụ: Tạo lớp Book để mô hình quyển sách Trong

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’

ĐIỂM CHÍNH

35