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

Bài giảng Kỹ thuật lập trình: Chương 4 - ĐH Kinh tế Luật

58 12 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

Định dạng
Số trang 58
Dung lượng 1,18 MB

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: Lớp và đối tượng cung cấp cho người học các kiến thức: Lập trình truyền thống và lập trình hướng đối tượng, các khái niệm liên quan tới Lớp và đối tượng,... Mời các bạn cùng tham khảo nội dung chi tiết.

Trang 1

Chương 4

Lớp và đối tượng

Trang 2

Lập trình truyền thống và lập trình hướng đối tượng

Trang 3

Phương pháp tiếp cận của lập trình truyền thống

 Lập trình tuyến tính.

 Lập trình cấu trúc

Ưu điểm

 Chương trình rõ ràng, dễ hiểu, dễ theo dõi.

 Tư duy giải thuật rõ ràng.

Khuyết điểm

 Không hỗ trợ việc sử dụng lại mã nguồn.

 Khi thay đổi cấu trúc dữ liệu, phải thay đổi giải thuật.

 Phải giải quyết các mối quan hệ vĩ mô giữa các module phần mềm trong các dự án lớn.

Trang 4

Đặc điểm cơ bản

 Tập trung vào dữ liệu thay cho các hàm.

 Chương trình được chia thành các đối tượng độc lập.

 Cấu trúc dữ liệu được thiết kế sao cho đặc tả được các đối tượng.

 Dữ liệu được che giấu, bao bọc.

 Các đối tượng trao đổi với nhau thông qua các hàm.

 Chương trình được thiết kế theo hướng tiếp cận từ dưới lên.

Trang 5

Một số ưu điểm nổi bật

 Không có nguy cơ dữ liệu bị thay đổi tự do trong chương trình.

 Khi thay đổi cấu trúc dữ liệu của một đối tượng, không cần thay đổi mã nguồn của các đối tượng khác.

 Có thể sử dụng lại mã nguồn, tiết kiệm tài nguyên.

 Phù hợp với các dự án phần mềm lớn, phức tạp.

Trang 6

Khái niệm đối tượng (object) trong lập trình

hướng đối tượng giống như một đối tượng cụ thể

tượng, gọi tắt là phương thức (method).

Trang 10

Các đối tượng có các đặc điểm (thuộc tính và

phương thức) giống nhau được gom nhóm thành

một lớp để phân biệt với các đối tượng khác và dễ

quản lý

hay là kiểu (type) của đối tượng

Trang 11

Như vậy Lớp là một khái niệm trừu tượng, dùng

để chỉ một tập hợp các đối tượng có mặt trong hệ

Trang 12

Một Lớp có thể có một trong các khả năng sau:

 Hoặc chỉ có thuộc tính, không có phương thức.

 Hoặc chỉ có phương thức, không có thuộc tính.

 Hoặc có cả thuộc tính và phương thức, trường hợp này

là phổ biến nhất.

các lớp trừu tượng Các lớp này không có đối

tượng tương ứng

Trang 13

Không gian tên (namespace)

 Một nhóm các lớp (classes) và giao diện (interfaces)

được tổ chức thành một đơn vị quản lý theo hình thức

không gian tên gọi là namespace.

 Lợi ích của namespace là tổ chức sắp xếp lại hệ thống

thông tin các lớp trong dự án một cách khoa học, giúp

cho việc theo dõi bảo trì dự án được tốt nhất.

Trang 14

Tính trừu tượng:

 Lớp (Class) là một khái niệm trừu tượng, đối tượng là

một thể hiện cụ thể của lớp.

 Ví dụ:

 Bản thiết kế của chiếc xe hơi là lớp.

 Chiếc xe hơi được tạo ra từ bản thiết kế là đối tượng.

Class

Object

Trang 15

Tính trừu tượng:

 Từ những đối tượng giống nhau: trừu tượng hóa thành

một lớp:

 Chỉ đưa ra các thuộc tính và phương thức cần thiết của

đối tượng trong lập trình.

Ví dụ:

Class Objects

Trừu tượng hóa

Trang 16

Tính đóng gói:

 Mỗi lớp được xây dựng để thực hiện một nhóm chức

năng đặc trưng của riêng lớp đó.

 Tất cả mọi thao tác truy xuất vào thành phần dữ liệu từ

đối tượng này qua đối tượng khác phải được thực hiện

bởi các phương thức (method) của chính đối tượng

chứa dữ liệu.

 Tính đóng gói cho phép dấu thông tin của đối tượng

bằng cách kết hợp thông tin và các phương thức liên

quan đến thông tin trong đối tượng.

Trang 17

Tính đóng gói:

 Ví dụ:

ngungXe() chayToi() chayLui() kiemTraXang()

Trang 18

bổ sung thêm các thành phần mới.

Trang 19

Tính kế thừa:

 Ví dụ:

Trang 20

Quy tắc đặt tên Lớp trong C#

mỗi từ nên viết hoa

được các Lớp, các đối tượng, thuộc tính và

phương thức của đối tượng???

Trang 21

class TenLop {

//khai báo biến lớp

Trang 22

Định nghĩa lớp Phân Số:

class PhanSo{

//khai báo biến lớp

Trang 23

public class PhanSo

public int MauSo {

get ;

set ; }

public override string ToString() {

return this TuSo+ "/" + this MauSo;

} }

Properties:

Trang 24

TenLop tenBien = new TenLop();

Ví dụ:

 PhanSo psA = new PhanSo();

 XeHoi xeHoiB = new XeHoi();

Từ khóa new dùng để cấp phát bộ nhớ cho đối

tượng psA và xeHoiB là 2 biến đối tượng trỏ tới 2

vùng nhớ được cấp phát trong thanh RAM

psA

xeHoiB

RAM

Trang 26

Lưu trữ tình trạng của đối tượng

Ví dụ

 public int tuSo;

 private int mauSo

 protected int soBanhXe;

Truy xuất biến lớp:

 tenDoiTuong.bienLop

Trang 27

Các hàm bên trong lớp

Trang 28

 Dùng cho các thành phần lớp không phụ thuộc vào đối

tượng cụ thể

 Có thể truy cập trong bản thân lớp

 Được truy cập trực tiếp từ tên lớp

 Phương thức static chỉ truy cập được những thành

viên static của lớp

 Truy cập:

 TenLop.TenBien

 TenLop.TenPhuongThuc()

 Có thể hiểu static là ô nhớ chia sẻ chung, khi biến

static thay đổi giá trị thì toàn bộ các đối tượng đều

thấy sự thay đổi này.

Trang 29

Khởi tạo giá trị ban đầu cho đối tượng khi khai báo

class TenLop

{

public TenLop() {

} }

Trang 30

Là constructor không có tham số và không thực

hiện lệnh gì cả (hoặc thực hiện một số lệnh khởi

tạo mặc định theo chủ ý của Lập trình viên)

sẽ tự thêm constructor mặc định

Trang 31

Một lớp có thể có nhiều constructor

ứng khi khai báo

mặc định sẽ không có Nếu muốn sử dụng thì phải

khai báo lại

Trang 32

class PhanSo

{

//khai báo biến lớp

private int tuSo;

private int mauSo;

public PhanSo() {

Trang 33

Khởi tạo đối tượng phân số có tử số = 0, mẫu số = 1:

Trang 34

Tham khảo đến đối tượng hiện hành

biến lớp, sử dụng this để chỉ biến lớp

class PhanSo {

private int tuSo ; private int mauSo ;

public PhanSo(int tuSo, int mauSo) {

} }

Trang 35

Đối tượng là kiểu tham chiếu

Nếu có câu lệnh tác động đến giá trị các biến lớp

của đối tượng trong phương thức  đối tượng bị

thay đổi sau khi hoàn tất phương thức

Trang 36

Thay đổi tên biến  thay đổi code ở những chỗ

dùng biến?

Kiểm tra hợp lệ khi gán giá trị biến?

lớp?

Trang 37

 Không cho phép truy cập biến lớp

class PhanSo

{

private int tuSo;

public int mauSo;

public int LayTuSo() {

return tuSo;

} public void GanTuSo(int gt) {

tuSo = gt;

} }

Trang 38

Dùng để bảo vệ việc truy cập biến lớp

nhiều đến chương trình

Trang 39

class PhanSo {

private int tuSo;

private int mauSo;

public int TuSo {

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

public int MauSo {

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

}

Trang 40

class PhanSo {

private int tuSo;

private int mauSo;

public int TuSo { … }

public int MauSo {

get { return mauSo; } set

}

Trang 41

Không cho người dùng sửa giá trị biến

Chỉ có get, không có set

class PhanSo {

private int tuSo;

private int mauSo;

private double giaTri;

public double GiaTri {

get { return giaTri; } }

public double LayGiaTri() {

giaTri = (double)tuSo / (double)mauSo;

return giaTri;

} }

Trang 42

class PhanSo

{

private int tuSo;

private int mauSo;

private double giaTri;

public int TuSo{…}

public int MauSo{…}

public double GiaTri {

get { return (double)tuSo / (double)mauSo; } }

}

Trang 44

Xây dựng hàm để thực hiện tính toán

class PhanSo

{

private int tuSo;

private int mauSo;

public PhanSo Cong(PhanSo b) {

PhanSo c = new PhanSo();

c.TuSo = this.MauSo * b.TuSo + this.TuSo * b.MauSo;

c.MauSo = this.MauSo * b.MauSo;

return c;

} }

Trang 45

public static PhanSo operator + ( PhanSo trai, PhanSo phai) {

PhanSo c = new PhanSo();

c.TuSo = trai.MauSo * phai.TuSo

+ trai.TuSo * phai.MauSo;

c.MauSo = trai.MauSo * phai.MauSo;

return c;

}

Trang 46

Các toán tử logic phải đi đôi với nhau

> và <

>= và <=

== và !=

Trang 48

Một lớp có nhiều phương thức, có những phương

thức cung cấp ra ngoài cho các đối tượng khác sử

dụng (public, gọi là Service method), có phương

phức chỉ sử dụng trong lớp (private, gọi là Support

Method)

Trang 49

public class TamGiac

{

public int CanhA { get ; set ; }

public int CanhB { get ; set ; }

public int CanhC { get ; set ; }

private bool laHopLe() {

if (CanhA > 0 && CanhB > 0 && CanhC > 0 &&

(CanhA + CanhB) > CanhC &&

(CanhB + CanhC) > CanhA &&

(CanhA + CanhC) > CanhB)

return true ;

return false ; }

public int ChuVi() {

if (laHopLe() == false )

return -1;

return CanhA + CanhB + CanhC;

} }

Trang 50

Overloading Method:

thức cùng tên nhưng khác nhau về Signature

dữ liệu các đối số hoặc thứ tự các đối số

phương thức và giúp việc gọi hàm “uyển chuyển”

Overloading Method

Trang 52

C# cung cấp một loại phương thức đặc biệt đó là

Parameter List, cũng là một trường hợp đặc biệt

của Overloading Method

phương thức Sum cũng được

public int Sum( params int []arr) {

Sum(1, 5, -8,2)

Trang 53

Alias là đặc điểm mà trên một ô nhớ có nhiều biến

đối tượng cùng trỏ tới

Ví dụ:

Lúc này trên thanh RAM sẽ có 2 ô nhớ cấp phát cho 2

đối tượng phân số được quản lý bởi 2 biến đối tượng

psA và psB

Vùng nhớ A

Vùng nhớ B

Trang 54

Giả sử ta thực hiện lệnh:

psA=psB;

hệ thống máy tính sẽ làm việc theo cơ chế “Phân số A

trỏ tới vùng nhớ mà phân số B đang quản lý” Hay

nói cách khác “Vùng nhớ B” bây giờ có 2 biến đối

tượng cùng trỏ tới(cùng quản lý)

Vùng nhớ A

Vùng nhớ B

Trang 55

Như vậy đã xuất hiện Alias ở “vùng nhớ B” Lúc

này sẽ xảy ra 2 hiện tượng như sau:

 Tại “vùng nhớ B”, nếu psA thay đổi thông tin sẽ làm cho

psB thay đổi thông tin (vì cả 2 đối tượng này cùng quản

lý một vùng nhớ)

 “Vùng nhớ A” không còn đối tượng nào tham chiếu tới,

lúc này hệ thống sẽ tự động thu hồi bộ nhớ (hủy vùng

nhớ A đã cấp trước đó), cơ chế này gọi là cơ chế gom rác

tự động

Vùng nhớ A

Vùng nhớ B

Trang 56

Đôi khi trong quá trình thực hiện phần mềm ta có

nhu cầu sao chép đối tượng ra (tạo thêm một đối

tượng giống y xì đối tượng cũ nhưng nằm ở ô nhớ

khác, để ta có thể tự do thay đổi thông tin trên đối

tượng sao chép mà không làm ảnh hưởng tới đối

MemberwiseClone để sao chép đối tượng

public PhanSo copy()

{

return this MemberwiseClone() as PhanSo ; }

Trang 57

Ví dụ:

psA thay đổi không ảnh hưởng gì tới psB và ngược lại

PhanSo psB = new PhanSo (1,4);

PhanSo psA = psB.copy();

Vùng nhớ A

Vùng nhớ B

Trang 58

END

Ngày đăng: 11/05/2021, 01:22

TỪ KHÓA LIÊN QUAN