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

bài 2 lập tình hướng đối tượng và collection

49 369 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 đề Bài 2: Lập trình hướng đối tượng & Collection
Trường học Trường Đại Học Công Nghệ Thông Tin - ĐHQG Hà Nội
Chuyên ngành Lập trình hướng đối tượng và Collection
Thể loại Bài giảng
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 49
Dung lượng 2,49 MB

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

Nội dung

Định nghĩa lớp dẫn xuấtĐịnh nghĩa phương thức khởi tạo gọi đến phương thức khởi tạo của lớp cơ sở Gọi đến phương thức hoặc thuộc tính của lớp cơ sở Ẩn phương thức non-virtual Ghi đè lên

Trang 1

Bài 2:

Lập trình hướng đối tượng & Collection

Trang 2

Giới thiệu về NET và Visual Studio

Giới thiệu về các kiến thức lập trình cơ bản trên ngôn

ngữ C#

Kiểu dữ liệu

Toán tử

Thao tác với chuỗi

Cấu trúc điều khiển

Phương thức

Xử lý ngoại lệ

Hệ thống bài cũ

Giới thiệu về NET và Visual Studio

Giới thiệu về các kiến thức lập trình cơ bản trên ngôn

ngữ C#

Kiểu dữ liệu

Toán tử

Thao tác với chuỗi

Cấu trúc điều khiển

Phương thức

Xử lý ngoại lệ

Trang 4

LỚP, CẤU TRÚC VÀ

ĐỐI TƯỢNG LỚP, CẤU TRÚC VÀ

ĐỐI TƯỢNG

Trang 5

Định nghĩa lớp

Tạo đối tượng từ lớp

Dim dtSanpham As Sanpham

dtSanpham = New Sanpham()

Sanpham dtSanpham ; dtSanpham = new Sanpham();

Trang 6

Phương thức khởi tạo

Visual Basic

Khởi tạo không có tham số

Khởi tạo có tham số

C#

Khởi tạo không có tham số

Khởi tạo có tham số

End Sub

{ }

Khởi tạo không có tham số

Khởi tạo có tham số

Khởi tạo không có tham số

Khởi tạo có tham số

End Sub

{ }

Trang 7

Định nghĩa các trường

và phương thức cho lớpVisual Basic

Định nghĩa trường

Định nghĩa phương thức

C#

End Function

{ }

Trang 8

Điều khiển truy cập

Phạm vi public internal protected private

Trang 9

Kế thừa

SanPham

string ma string ten decimal gia string hienThiThongTin()

Lớp cơ sở

Sach

string ma string ten decimal gia string hienThiThongTin() string tacgia

PhanMem

string ma string ten decimal gia string hienThiThongTin() string phienban

Trang 10

Viết từ khóa virtual trước phương thức có thể sẽ được

ghi đè ở các lớp dẫn xuất

Tạo lớp cơ sở

public class SanPham

{

public string Ma { get ; set ; }

public string Ten { get ; set ; }

public decimal Gia { get ; set ; }

public SanPham( string ma, string ten, decimal gia) {

this Ma = ma;

this Ten = ten;

this Gia = gia;

}

public class SanPham

{

public string Ma { get ; set ; }

public string Ten { get ; set ; }

public decimal Gia { get ; set ; }

public SanPham( string ma, string ten, decimal gia) {

this Ma = ma;

this Ten = ten;

this Gia = gia;

}

Trang 11

Định nghĩa lớp dẫn xuất

Định nghĩa phương thức khởi tạo gọi đến phương thức

khởi tạo của lớp cơ sở

Gọi đến phương thức hoặc thuộc tính của lớp cơ sở

Ẩn phương thức non-virtual

Ghi đè lên phương thức virtual

Tạo lớp dẫn xuất

public class TenLopDanXuat: TenLopCoSo

public TenLop (danhSachThamSo): base(danhSachThamSo)

Định nghĩa lớp dẫn xuất

Định nghĩa phương thức khởi tạo gọi đến phương thức

khởi tạo của lớp cơ sở

Gọi đến phương thức hoặc thuộc tính của lớp cơ sở

Trang 12

Demo tạo lớp dẫn xuất

class Sach : SanPham

{

public string Tacgia { get ; set ; }

public Sach( string ma, string ten, string tacgia, decimal gia)

: base (ma, ten, gia) {

this Tacgia = tacgia;

public string Tacgia { get ; set ; }

public Sach( string ma, string ten, string tacgia, decimal gia)

: base (ma, ten, gia) {

this Tacgia = tacgia;

Trang 13

Cách khác để ghi đè lên một phương thức

Demo tạo lớp dẫn xuất

public override string hienThiThongTin()

Trang 14

Là tính năng quan trọng trong lập trình hướng đối tượngGiúp ứng dụng sẽ ứng xử khác nhau đối với các đối

tượng khác nhau kế thừa từ một lớp cơ sở

Thường được sử dụng khi không xác định được kiểu củađối tượng lúc chạy

Đa hình

Trang 15

Demo sử dụng đa hình

Sach sach = new Sach( "S001", "Lap trinh Winform", "Joel Murach", 20);

PhanMem phanmem = new PhanMem( "PM001", "Kapersky", "2012", 30);

Sach sach = new Sach( "S001", "Lap trinh Winform", "Joel Murach", 20);

PhanMem phanmem = new PhanMem( "PM001", "Kapersky", "2012", 30);

Trang 16

Cho phương thức hienThi như sau

Hãy đoán kết quả khi gọi phương thức hienThi như sau

Cho phương thức hienThi như sau

Hãy đoán kết quả khi gọi phương thức hienThi như sau

Sach sach = new Sach( "S001", "Lap trinh Winform", "Joel Murach", 20);

PhanMem phanmem = new PhanMem( "PM001", "Kapersky", "2012", 30);

hienThi(sach);

hienThi(phanmem);

Trang 17

Dùng để định nghĩa kiểu biến giống như lớp nhưng kiểugiá trị

Các kiểu giá trị như int, decimal, DateTime…

Ưu điểm của cấu trúc

Tiết kiệm bộ nhớ

Khởi tạo nhanh hơn

tượng muốn lưu trữ kiểu giá trị

Các kiểu giá trị như int, decimal, DateTime…

Ưu điểm của cấu trúc

Tiết kiệm bộ nhớ

Khởi tạo nhanh hơn

tượng muốn lưu trữ kiểu giá trị

Cấu trúc giống lớp

Các trường, thuộc tính, phương thức, sự kiện và toán hạng Thành viên tĩnh và thành viên thực thể

Trang 18

Hạn chế của cấu trúc so với lớp

Không hỗ trợ phương thức khởi tạo không có tham số

Không hỗ trợ kế thừa

Không hỗ trợ thuộc tính tự khởi tạo

Các thành viên chỉ được gọi khi được khởi tạo

Cấu trúc

Hạn chế của cấu trúc so với lớp

Không hỗ trợ phương thức khởi tạo không có tham số

Không hỗ trợ kế thừa

Không hỗ trợ thuộc tính tự khởi tạo

Các thành viên chỉ được gọi khi được khởi tạo

Trang 19

Demo định nghĩa cấu trúc

public struct SanPham

{

public string Ma;

public string Ten;

public decimal Gia;

public SanPham( string ma, string ten, decimal gia) {

this Ma = ma;

this Ten = ten;

this Gia = gia;

public string Ma;

public string Ten;

public decimal Gia;

public SanPham( string ma, string ten, decimal gia) {

this Ma = ma;

this Ten = ten;

this Gia = gia;

Trang 20

Khai báo và gán giá trị cho cấu trúc

Khởi tạo giá trị cho cấu trúc

Demo khai báo và khởi tạo cấu trúc

Khai báo và gán giá trị cho cấu trúc

Khởi tạo giá trị cho cấu trúc

SanPham sp2 = new SanPham ( "002", "SH", 120000000 );

Trang 21

NAMESPACES NAMESPACES

Trang 22

.NET 4.0 cung cấp rất nhiều lớp và cấu trúc cài đặt sẵn

Các lớp và cấu trúc này thuộc NET FrameWork

.NET 4.0 cung cấp rất nhiều lớp và cấu trúc cài đặt sẵn

Các lớp và cấu trúc này thuộc NET FrameWork

Trang 24

Xem file NET35_Namespaces_Poster_LORES để biết

thêm về các lớp được các lớp được hỗ trợ bởi NET 3.5Xem file PDC2008-NETFX4 để biết thêm về các lớp mớiđược NET 4 hỗ trợ

Namespaces

Trang 25

CẤU TRÚC DATETIME

& LỚP STRING CẤU TRÚC DATETIME

& LỚP STRING

Trang 26

Thuộc namespace System

Cú pháp tạo đối tượng DateTime

Ví dụ

Cấu trúc DateTime

DateTime tenbien = new DateTime (nam, thang,

ngay [, gio, phut, giay [, miligiay]]);

//hoặc

DateTime tenbien = DateTime.Parse (string)

Thuộc namespace System

Cú pháp tạo đối tượng DateTime

Ví dụ

//1/30/2010 12:00 AM

DateTime date1 = new DateTime(10, 01, 30);

//1/30/2010 2:15 PM

Trang 27

Thuộc tính của DateTime

Year Trả về năm của giá trị DateTime Hour Trả về giờ của giá trị DateTime Minute Trả về phút của giá trị DateTime Second Trả về giây của giá trị DateTime

DateTime thoiGianHienTai = DateTime.Now; //30/1/2010 10:26:35

DateTime ngayThangHienTai = DateTime.Today; //30/1/2010 12:00:00 AM

int thang = ngayThangHienTai.Day; //1

Trang 28

Phương thức của DateTime

addDays(songay) Thêm số ngày vào giá trị kiểu DateTime và trả

về giá trị khác kiểu DateTime addMonths(sothang) Thêm số tháng vào giá trị kiểu DateTime và

trả về giá trị khác kiểu DateTime addYears(sonam) Thêm số năm vào giá trị kiểu DateTime và trả

về giá trị khác kiểu DateTime

Thêm số năm vào giá trị kiểu DateTime và trả

về giá trị khác kiểu DateTime DaysInMonth(nam, thang) Trả về số ngày có trong 1 tháng năm xác định

IsLeapYear(nam) Trả về giá trị Boolean cho biết năm được chỉ ra

có phải là năm nhuận hay không

Trang 29

Thuộc namespace System

StartsWith(chuoi) Trả về giá trị boolean cho biết chuỗi đó có

được bắt đầu bằng chuỗi chỉ ra hay không EndsWith(chuoi) Trả về giá trị boolean cho biết chuỗi đó có

được kết thúc bằng chuỗi chỉ ra hay không IndexOf(chuoi) Trả về vị trí xuất hiện chuỗi đầu tiên

Insert(chisodau, chuoi) Thêm chuỗi được chỉ ra vào vị trí xác định

Trang 30

Demo sử dụng String

string chars = "abcdefg";

char a = chars[0]; //'a'

char b = chars[1]; //'b'

bool isStartWith = chars.StartsWith( "abc"); //true

bool isEndWith = chars.EndsWith( "abc"); //false

string tenCongTy = "Mike Murach and Associates";

int index1 = tenCongTy.IndexOf( "Murach"); //5

int index2 = tenCongTy.LastIndexOf( " "); //15

string chars = "abcdefg";

char a = chars[0]; //'a'

char b = chars[1]; //'b'

bool isStartWith = chars.StartsWith( "abc"); //true

bool isEndWith = chars.EndsWith( "abc"); //false

string tenCongTy = "Mike Murach and Associates";

int index1 = tenCongTy.IndexOf( "Murach"); //5

int index2 = tenCongTy.LastIndexOf( " "); //15

Trang 31

MẢNG VÀ

COLLECTION

Trang 32

Cú pháp khai báo mảng một chiều

int[] diem = new int[10];

//khai báo và khởi tạo giá trị cho mảng

int[] diem3 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

int[] diem;

diem = new int[10];

//hoặc

int[] diem = new int[10];

//khai báo và khởi tạo giá trị cho mảng

int[] diem3 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

Trang 33

Kiểu giá trị Giá trị mặc định

Trang 34

Lấy độ dài của mảng

Truy cập đến phần tử của mảng

Gán giá trị cho các phần tử của mảng

Duyệt qua các phần tử của mảng

Thao tác với mảng

int tong = diem[0] + diem[1] + diem[2];

int dodai = diem.Length

Lấy độ dài của mảng

Truy cập đến phần tử của mảng

Gán giá trị cho các phần tử của mảng

Duyệt qua các phần tử của mảng

diem[0] = 9;

int tong = 0;

for (int i = 0; i < diem.Length; i++)

Trang 35

Khai báo mảng hai chiều

Gán giá trị cho các phần tử

Mảng hai chiều

kieu[,] tenMang = new kieu[hang, cot]

//ví dụ:

int[,] diem = new int [3, 2];

//khai báo và khởi tạo giá trị cho mảng

Trang 36

Mỗi mảng là một thể hiện của lớp Array

Lớp Array chứa các thuộc tính và phương thức để thaotác với lớp

Lớp Array

Length Cho biết số phần tử của element

Phương thức thực thể Mô tả

GetLength(chieu) Cho biết số phần tử của chiều được chỉ ra

GetUpperBound(chieu) Cho biết chỉ số của phần tử cuối cùng của

chiều được chỉ ra

Trang 38

Các lớp collection không định kiểu được lưu trữ trong

namespace System.Collections

Lưu trữ các kiểu khác nhau trong một collection

Các đối tượng khi lưu vào collection không định kiểu được

tự động chuyển thành kiểu Object (boxing)

Khi lấy dữ liệu ra khỏi collection cần phải ép dữ liệu về

đúng kiểu ban đầu (unboxing)

Nhược điểm:

Cần phải ép về kiểu ban đầu

Thường gặp lỗi xẩy ra khi ép kiểu sai

Collection không định kiểu

Các lớp collection không định kiểu được lưu trữ trong

namespace System.Collections

Lưu trữ các kiểu khác nhau trong một collection

Các đối tượng khi lưu vào collection không định kiểu được

tự động chuyển thành kiểu Object (boxing)

Khi lấy dữ liệu ra khỏi collection cần phải ép dữ liệu về

đúng kiểu ban đầu (unboxing)

Nhược điểm:

Cần phải ép về kiểu ban đầu

Thường gặp lỗi xẩy ra khi ép kiểu sai

Trang 39

Boxing và Unboxing

Trang 40

Demo sử dụng collection không định kiểu

ArrayList numbers = new ArrayList();

Trang 41

Các lớp collection định kiểu được lưu trữ trong

namespace System.Collections.Generic

Lưu trữ cùng một kiểu dữ liệu trong một Collection

Collection định kiểu

Dictionary<TKey, TValue> Lưu trữ collection gồm cặp khóa và giá trị

HashSet<T> Lưu trữ tập các giá trị

Các lớp collection định kiểu được lưu trữ trong

namespace System.Collections.Generic

Lưu trữ cùng một kiểu dữ liệu trong một Collection

HashSet<T> Lưu trữ tập các giá trị

LinkedList<T> Lưu trữ danh sách liên kết đôi

List<T> Lưu trữ mảng các đối tượng

Queue<T> Lưu trữ hàng đợi “Vào trước, ra trước”

SortedSet<T> Lưu trữ tập các giá trị được sắp xếp

Stack<T> Lưu trữ đối tượng theo “Vào sau, ra trước”

Tìm hiểu thêm về các collection và cách sử dụng chúng trên trang

Trang 42

Demo sử dụng collection định kiểu

List<int> numbers = new List<int>();

Trang 43

TỰ SINH MÃ

KHAI BÁO

TỰ SINH MÃ

KHAI BÁO

Trang 44

Tự sinh mã là tính năng mới của Visual Studio 2010

Tính năng này sẽ tự sinh mã khai báo cho bạn khi cần

thiết

Bạn khai báo một đối tượng của lớp chưa định nghĩa

Tính năng này sẽ tự động sinh mã định nghĩa lớp cho bạn

Bạn gọi một phương thức chưa được định nghĩa

Tính năng này sẽ định nghĩa phương thức cho bạn

Tự sinh mã khai báo (generate code stubs)

Tự sinh mã là tính năng mới của Visual Studio 2010

Tính năng này sẽ tự sinh mã khai báo cho bạn khi cần

thiết

Bạn khai báo một đối tượng của lớp chưa định nghĩa

Tính năng này sẽ tự động sinh mã định nghĩa lớp cho bạn

Bạn gọi một phương thức chưa được định nghĩa

Tính năng này sẽ định nghĩa phương thức cho bạn

Trang 45

Khai báo đối tượng thuộc lớp KhachHang chưa được

định nghĩa

Demo sử dụng tính năng tự sinh mã khai báo

Trang 46

Gọi đến phương thức hienThiThongTin chưa được

định nghĩa

Demo sử dụng tính năng tự sinh mã khai báo

Trang 47

Gọi đến phương thức hienThiThongTin chưa được

định nghĩa với hai đối số name và age

Demo sử dụng tính năng tự sinh mã khai báo

Thêm một phương thức

hienThiThongTin

Trang 48

Các khái niệm về lập trình hướng đối tượng và collectiontrong C# giống hệt như trong Visual Basic, chỉ khác

nhau về cú pháp

Đối với kế thừa

Trong lớp cơ sở viết từ khóa virtual trước phương thức sẽ được ghi đè

Trong lớp dẫn xuất viết từ khóa override trước phương

thức sẽ được ghi đè

Đa hình là tính năng quan trọng trong lập trình hướng

đối tượng giúp ứng dụng sẽ ứng xử khác nhau đối với

các đối tượng khác nhau kế thừa từ một lớp cơ sở

Tổng kết bài học

Các khái niệm về lập trình hướng đối tượng và collectiontrong C# giống hệt như trong Visual Basic, chỉ khác

nhau về cú pháp

Đối với kế thừa

Trong lớp cơ sở viết từ khóa virtual trước phương thức sẽ được ghi đè

Trong lớp dẫn xuất viết từ khóa override trước phương

thức sẽ được ghi đè

Đa hình là tính năng quan trọng trong lập trình hướng

đối tượng giúp ứng dụng sẽ ứng xử khác nhau đối với

các đối tượng khác nhau kế thừa từ một lớp cơ sở

Trang 49

Collection được phân làm hai loại Collection định kiểu vàkhông định kiểu

Collection không định kiểu có thể lưu nhiều loại đối

tượng và collection, nhưng khi lưu sẽ chuyển các đối

tượng này về kiểu Object (boxing)

Collection định kiểu chỉ lưu một kiểu đã được định nghĩatrước vào collection

Visual Studio 2010 cung cấp tính năng tự sinh mã khai

báo khi các biến hoặc phương thức được gọi chưa đượckhai báo trước đó

Tổng kết bài học

Collection được phân làm hai loại Collection định kiểu vàkhông định kiểu

Collection không định kiểu có thể lưu nhiều loại đối

tượng và collection, nhưng khi lưu sẽ chuyển các đối

tượng này về kiểu Object (boxing)

Collection định kiểu chỉ lưu một kiểu đã được định nghĩatrước vào collection

Visual Studio 2010 cung cấp tính năng tự sinh mã khai

báo khi các biến hoặc phương thức được gọi chưa đượckhai báo trước đó

Ngày đăng: 23/05/2014, 16:02

TỪ KHÓA LIÊN QUAN