1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Lập trình ứng dụng trong kỹ thuật - Cơ Điện Tử - Chương 3 pot

19 615 2

Đ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 19
Dung lượng 311,02 KB

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

Nội dung

Đơn vị này tương đương với một chương trình con và vì thế các đối tượng sẽ được chia thành hai bộ phận chính: phần các phương thức method và phần các thuộc tính attribute.. Trong thực tế

Trang 1

TÓM TẮT CHƯƠNG 3 : C++/CLI HƯỚNG ĐỐI TƯỢNG

PHẦN A : GIỚI THIỆU TỔNG QUAN

1) Tổng quan về các phương pháp lập trình :

a) Lập trình tuyến tính :

Đây là phương pháp lập trình ra đời đầu tiên Đặc trưng cơ bản của lập trình tuyến tính là

tu duy theo lối tuần tự : chương trình được thực hiện từ đầu đến cuối, lệnh này kế tiếp lệnh kia cho đến khi kết thúc chương trình

Đặc trưng của lập trình tuyến tính :

 Đơn giản : lập trình theo lối tuần tự, không phức tạp

 Đơn luồng : chỉ có một luông công việc được thực hiện tuần tự

Nhược điểm :

 Không thể thực hiện được các chương trình phức tạp

 Chương trình dài

b) Lập trình cấu trúc :

Trong lập trình cấu trúc, chương trình chính được chia nhỏ thành các chương trình con, mỗi chương trình con thực hiện một công việc xác định (chương trình con chính là các hàm) Chương trình sẽ gọi đến chương trình con bằng một giải thuật hay một cú pháp nhất định trong chương trình Một chương trình con có thể được gọi nhiều lần trong chương trình chính

Đặc trưng của lập trình cấu trúc

 Chương trình bao gồm hai thành phần chính : cấu trúc dữ liệu và giải thuật Cấu trúc

dữ liệu là cách thức tổ chức dữ liệu, cách mô tả bài toán dưới dạng ngôn ngữ lập trình Giải thuật là qui trình để thực hiện bài toán đó

 Giải thuật luôn luôn phụ thuộc vào cấu trúc dữ liệu

Nhược điểm :

 Không hỗ trợ việc sử dụng lại mã nguồn do giải thuật luôn phụ thuộc vào cấu trúc

dữ liệu Khi thay đổi cấu trúc dữ liệu thì đồng thời phải thay đổi luôn cả giải thuật

c) Lập trình hướng đối tượng :

Lập trình hướng đối tượng ra đời nhằm khắc phục các hạn chế của lập trình cấu trúc Lập trình hướng đối tượng được xây dựng trên cơ sở các đối tượng Những đối tượng trong một ngôn ngữ hướng đối tượng là các kết hợp giữa mã và dữ liệu mà chúng được nhìn nhận như là một đơn

vị duy nhất Mỗi đối tượng có một tên riêng biệt và tất cả các tham chiếu đến đối tượng đó được tiến hành qua tên của nó Như vậy, mỗi đối tượng có khả năng nhận vào các thông báo, xử lý dữ liệu (bên trong của nó), và gửi ra hay trả lời đến các đối tượng khác hay đến môi trường

Trang 2

VD : Chuỗi kí tự trong C++/CLI là một dạng đối tượng Khi chúng ta khai báo String^ a =

“Hello” tức là đã tạo ra một đối tượng Đối tượng này có tên là a, ta có thể tiến hành các tham

chiếu thông qua tên của đối tượng : a->Length ; a->Substring() …

2) Lập trình hướng đối tượng:

Lập trình hướng đối tượng (gọi tắt là OOP, từ chữ Anh ngữ object-oriented

programming), hay còn gọi là lập trình định hướng đối tượng, là kĩ thuật lập trình hỗ trợ công

nghệ đối tượng Một cách giản lược, đây là khái niệm và là một nỗ lực nhằm giảm nhẹ các thao tác viết mã cho người lập trình, cho phép họ tạo ra các ứng dụng mà các yếu tố bên ngoài có thể tương tác với các chương trình đó giống như là tương tác với các đối tượng vật lý

Những đối tượng trong một ngôn ngữ OOP là các kết hợp giữa mã và dữ liệu mà chúng được nhìn nhận như là một đơn vị duy nhất Mỗi đối tượng có một tên riêng biệt và tất cả các tham chiếu đến đối tượng đó được tiến hành qua tên của nó Như vậy, mỗi đối tượng có khả năng nhận vào các thông báo, xử lý dữ liệu (bên trong của nó), và gửi ra hay trả lời đến các đối tượng khác hay đến môi trường

a) Các tính chất :

Đối tượng (object): Các dữ liệu và mã lệnh được kết hợp vào một đơn vị đầy đủ tạo nên

một đối tượng Đơn vị này tương đương với một chương trình con và vì thế các đối tượng sẽ được

chia thành hai bộ phận chính: phần các phương thức (method) và phần các thuộc tính (attribute)

Trong thực tế, các phương thức của đối tượng là các hàm và các thuộc tính của nó là các biến,

các tham số hay hằng nội tại của một đối tượng (hay nói cách khác tập hợp các dữ liệu nội tại tạo

thành thuộc tính của đối tượng) Các phương thức là phương tiện để sử dụng một đối tượng trong khi các thuộc tính sẽ mô tả đối tượng có những tính chất gì Các phương thức và các thuộc tính

thường gắn chặt với thực tế các đặc tính và sử dụng của một đối tượng

VD : Trong bài toán quản lí Sinh viên ở trường Đại học thì mỗi Sinh viên có thể được xem

là một đối tượng Các Sinh viên sẽ được phân biệt với nhau thông qua Họ tên Mỗi Sinh viên lại

được mô tả bởi Ngày sinh, Nơi sinh, MSSV, Ngành học, Điểm số … ; đây chính là các thuộc tính

của đối tượng Sinh viên Người quản lí muốn tác động đến thông tin của một Sinh viên nào đó thì

phải thông qua các phương thức của đối tượng Sinh viên như : Xem ngày sinh, Xem nơi sinh,

Nhập điểm số, Xem điểm số, Sửa điểm số …

Trong thực tế, các đối tượng thường được trừu tượng hóa qua việc định nghĩa của các lớp

(class) Tập hợp các giá trị hiện có của các thuộc tính tạo nên trạng thái của một đối tượng

Mỗi phương thức hay mỗi dữ liệu nội tại cùng với các tính chất được định nghĩa (bởi người lập trình) được xem là một đặc tính riêng của đối tượng Nếu không có gì lầm lẫn thì tập hợp các đặc tính này gọi chung là đặc tính của đối tượng

Tính đóng gói (Encapsulation) :

Trang 3

Các đối tượng có những thuộc tính tương tự nhau được gom thành một nhóm (lớp) Các thuộc tính chung nhất của các đối tượng sẽ được giữ lại và các thuộc tính chung này sẽ trở thành các thuộc tính của lớp

VD : trong nhóm các đối tượng là phương tiện giao thông, nếu chúng ta nhóm các đối

tượng có chung thuộc tính là : 2 bánh, có động cơ … thì chúng ta sẽ có nhóm xe máy Nếu chúng

ta nhóm các đối tượng có chung thuộc tính là : có 4 bánh, có động cơ … thì chúng ta sẽ có nhóm

xe ôtô

Trong nhóm xe máy, có xe có gương chiếu hậu, có xe không có, như vậy gương chiếu hậu không phải là thuộc tính chung và không được xem là thuộc tính của nhóm

Việc truy xuất đến các dữ liệu được thực hiện thông qua các phương thức được trang bị cho nhóm Nếu người sử dụng muốn thay đổi các thay đổi trạng thái của đối tượng thì bắt buộc phải thông qua các phương thức này Việc cho phép môi trường bên ngoài tác động lên các dữ liệu nội tại của một đối tượng theo cách nào là hoàn toàn tùy thuộc vào người viết mã Tính chất này không cho phép người sử dụng các đối tượng thay đổi trạng thái nội tại của một đối tượng

Tính thừa kế (Inheritance) :

Các lớp được tổ chức theo sơ đồ cây phân cấp Lớp cơ sở đầu tiên được gọi là lớp gốc (Root Class) Lớp phía trên được gọi là lớp cha hay lớp cơ sở Lớp phía dưới được gọi là lớp con hay lớp dẫn xuất

Lớp con có khả năng kế thừa các thuộc tính và phương thức của lớp cha Như vậy, khi định nghĩa một lớp mới là lớp con của một lớp cơ sở, ta không phải định nghĩa và xây dựng lại các thuộc tính và phương thức đã xây dựng cho lớp cơ sở thay vì phải xây dựng lại (đây chính là khả năng sử dụng lại mã nguồn)

VD : trong lớp các xe gắn máy, có thể chia ra hai lớp con là lớp xe tay ga và lớp xe số

Trong lớp xe gắn máy có các thuộc tính như màu sơn, nhãn hiệu … thì lớp xe tay ga có quyền kế thừa các thuộc tính này của lớp cha

Tính đa hình (Polymorphism) :

Các lớp dẫn xuất có cùng một lớp cơ sở nhưng cũng có những thuộc tính khác hẳn nhau Trong cùng một lớp cha, nếu ta gọi ra một phương thức nhưng nếu là từ các đối tượng thuộc các lớp con khác nhau thì sẽ được các kết quả khác nhau

VD : lớp cơ sở Human có hai lớp con là Student và Public Servant Trong lớp cơ sở có

định nghĩa một phương thức là Show()

Nếu sử dụng phương thức này đối với đối tượng thuộc lớp Human sẽ cho biết số CMND của đối tượng

Nếu sử dụng phương thức này đối với đối tượng thuộc Student sẽ cho biết MSSV

Nếu sử dụng phương thức này đối với đối tượng thuộc lớp Public Servant sẽ cho biết Mã

số công chức

Trang 4

b) Các khái niệm cơ bản :

Lớp (Class) :

Một lớp có thể được hiểu là khuôn mẫu để tạo ra các đối tượng Trong một lớp, người ta thường dùng các biến để mô tả các thuộc tính và các hàm để mô tả các phương thức của đối tượng Khi đã định nghĩa được lớp, ta có thể tạo ra các đối tượng từ lớp này Để việc sử dụng được dễ dàng, thông qua hệ thống hàm tạo (constructor), người ta dùng lớp như một kiểu dữ liệu

để tạo ra các đối tượng Nói tóm lại, lớp luôn luôn được đặc trưng bởi các thuộc tính và phương thức

Lớp con (subclass)

Lớp con là một lớp thông thường nhưng có thêm tính chất kế thừa một phần hay toàn bộ

các đặc tính của một lớp khác Lớp mà có các tính chất được lớp con kế thừa gọi là Lớp cha

(parent class)

Lớp trừu tượng (abstract class)

Lớp trừu tượng là lớp mà ta không thể thực thể hóa thành đối tượng (tạo ra đối tượng)

Thuộc tính (attribute)

Thuộc tính của một lớp bao gồm các biến, các hằng, hay tham số nội tại của lớp đó Ở đây, vai trò quan trọng nhất của các thuộc tính là các biến vì chúng sẽ có thể bị thay đổi trong suốt quá trình hoạt động của một đối tượng Các thuộc tính có thể được xác định kiểu và kiểu của chúng có thể là các kiểu dữ liệu cổ điển hay đó là một lớp đã định nghĩa từ trước

Phương thức (method)

Phương thức của một lớp thường được dùng để mô tả các hành vi của đối tượng (hoặc của lớp) Mỗi phương thức thường được định nghĩa là một hàm, các thao tác để thực hiện hành vi đó được viết tại nội dung của hàm

Người ta còn định nghĩa thêm vài loại phương thức đặc biệt:

 Hàm tạo (constructor) là hàm được dùng để tạo ra một đối tượng, cài đặt các giá trị ban đầu cho các thuộc tính của đối tượng đó

 Hàm hủy (destructor) là hàm dùng vào việc làm sạch bộ nhớ đã dùng để lưu đối tượng và hủy bỏ tên của một đối tượng sau khi đã dùng xong, trong đó có thể bao gồm cả việc xóa các con trỏ nội tại và trả về các phần bộ nhớ mà đối tượng đã dùng

Trang 5

PHẦN B : CLASS TRONG C++/CLI

Lớp trong C++/CLI cũng được đặc trưng bởi các thuộc tính và phương thức

Để bảo vệ tránh việc bị truy xuất tự do từ bên ngoài, các thuộc tính và phương thức trong lớp có sử dụng các từ khóa để qui định phạm vi truy xuất

 private : từ khóa cho biết chỉ cho phép truy xuất trong nội bộ lớp, không chia sẻ với các lớp khác

 protected : từ khóa cho biết được truy xuất hạn chế, chỉ cho phép truy xuất trong nội bộ lớp và các lớp con của lớp

 public : từ khóa cho biết được truy xuất tự do, cho phép truy xuất từ bên trong hoặc bên ngoài lớp

Đối với ref class, nếu ta không khai báo từ khóa qui định pham vi truy xuất, cách thức truy

cập mặc định là private

1) Khai báo Class:

ref class Class_name // Class_name là tên của Class {

VD :

ref class Hinh_tron

{

public :

// Variable :

UInt16 R;

// Method :

UInt16 Chu_vi()

{

return 2*(Math::PI)*R;

}

UInt16 Dien_tich()

{

return (Math::PI)*R*R;

}

};

Trong ví dụ trên, chúng ta đã tạo ra 1 Class có tên là Hinh_tron quản lí các đối tượng là các hình tròn có bán kính khác nhau Class có một thuộc tính là R (cho biết bán kính của đối tượng

Trang 6

hình tròn) và hai phương thức là Chu_vi() (tính chu vi của một đối tượng hình tròn) và Dien_tich() (tính diện tích của đối tượng)

Thuộc tính của class : R Biến có kiểu dữ liệu là UInt16

Phương thức của class : Chu_vi(), Dien_tich() Các hàm không tham số có trả về giá trị

2) Sử dụng Class:

Trong chương trình chính (hàm main()), để tạo ra một đối tượng từ ref class đã khai báo, ta

có hai cách :

Cách 1 : Dùng Handle^ :

Cú pháp : Class_name^ name = gcnew Class_name(); // name là tên đối tượng

VD : Hinh_tron^ A = gcnew Hinh_tron(); // Tạo đối tượng hình tròn A

Để truy xuất đến các biến và phương thức của ref class, ta dùng toán tử “->”

VD : A->R = 5; // Gán giá trị 5 cho thuộc tính R của đối tượng

Int16 x = A->Chu_vi(); // x = 31 ( 2*3.14*5 = 31.4 )

Int16 y = A->Dien_tich(); // y = 78 ( 5*5*3.14 = 78.5)

Cách 2 : Dùng stack :

Cú pháp : Class_name name ; // name là tên đối tượng

VD : Hinh_tron A ; // Tạo đối tượng hình tròn A

Để truy xuất đến các biến và phương thức của ref class, ta dùng toán tử “.”

VD : A.R = 5; // Gán giá trị 5 cho thuộc tính R của đối tượng

Int16 x = A.Chu_vi(); // x = 31 ( 2*3.14*5 = 31.4 )

Int16 y = A.Dien_tich(); // y = 78 ( 5*5*3.14 = 78.5)

3) Biến thành viên (Member Variable) :

Các biến thành viên đơn giản là các biến được khai báo bên trong class Cú pháp khai báo các biến thành viên cũng tương tự như khi khai báo các biến thông thường Tuy nhiên, đối với các biến thành viên, không thể khởi tạo giá trị cho biến khi khai báo trong class và các biến này đi kèm với đối tượng khi đối tượng được khởi tạo Giá trị của các biến thành viên có thể được gán thông qua constructor hay gán trực tiếp thông qua việc truy xuất đến đối tượng

VD :

ref class Sinh_vien

{

Trang 7

public:

String^ Ho_ten; // các biến thành viên

UInt32 MSSV;

String^ Nganh_hoc;

};

Trong chương trình chính, khi muốn truy xuất đến các biến thành viên của một class nào

đó, bắt buộc phải thông qua đối tượng Có nghĩa là ta phải tạo một đối tượng của class trước rồi sau đó mới có thể truy xuất các biến thành viên thông qua đối tượng này Việc truy xuất đến các biến thành viên được thực hiện thông qua toán tử “->” đối với đối tượng kiểu handle hay toán tử

“.” đối với đối tượng kiểu stack

VD :

ref class Sinh_vien

{

public:

String^ Ho_ten; // các biến thành viên

UInt32 MSSV;

String^ Nganh_hoc;

};

void main(void)

{

Sinh_vien^ A; // Tạo đối tượng kiểu handle

Sinh_vien B; // Tạo đối tượng kiểu stack

A->Ho_ten = “Nguyen Van A”; // Truy xuất đến biến thành viên

B.Ho_ten = “Nguyen Van B”;

A->MSSV = 8111123;

B.MSSV = 8111124;

Console::WriteLine(“{0}/t : {1}”,A->Ho_ten, A->MSSV);

Console::WriteLine(“{0} /t: {1}”,B.Ho_ten, B.MSSV);

Console::ReadKey();

}

Kết quả in ra màn hình : Nguyen Van A : 8111123

Lưu ý : Nếu không gán giá trị cho các biến thành viên tương ứng với đối tượng thì các biến này sẽ

có giá trị mặc định là giá trị mặc định của kiểu dữ liệu

Biến tĩnh (static variable) :

Trang 8

Nếu như muốn giá trị ban đầu cho biến trong khi khai báo biến thành viên trong class, ta

phải sử dụng biến tĩnh (khi khai báo biến tĩnh thì thêm từ khóa static) Giá trị khởi tạo này sẽ là

mặc định và chỉ được gán một lần duy nhất khi tạo đối tượng Do đó khi ta gán giá trị mới cho các biến tĩnh này thì biến sẽ cập nhật giá trị này

VD :

ref class Sinh_vien

{

public:

String^ Ho_ten; // các biến thành viên

UInt32 MSSV;

static String^ Nganh_hoc = “Co dien tu” ; // Biến tĩnh

};

void main(void)

{

Sinh_vien^ A;

A->Ho_ten = “Nguyen Van A”;

Console::WriteLine(“Ho va ten : {0}” , A->Ho_ten);

Console::WriteLine(“Nganh hoc : {0}”, A->Nganh_hoc);

Console::ReadKey();

}

Kết quả in ra màn hình : Ho va ten : Nguyen Van A

Các biến tĩnh còn cho phép truy xuất trực tiếp mà không cần phải thông qua đối tượng Việc truy xuất đến biến tĩnh có thể thông qua tên class và toán tử “::”; giá trị của biến là giá trị mặc định đã gán cho biến trong class

VD:

void main(void)

{

String^ a = Sinh_vien::Nganh_hoc;

Console::WriteLine(“Nganh hoc : {0}”, a);

Console::ReadKey();

}

Kết quả in ra màn hình : Nganh hoc : Co dien tu

Trang 9

Các biến tĩnh hay biến thành viên đều có thể được gán giá trị khác thông qua đối tượng Trong trường hợp muốn khai báo một biến hằng số có giá trị cho trước và không cho phép thay

đổi giá trị này, ta có thể khai báo biến dưới dạng biến hằng số (thêm từ khóa const khi khai báo)

VD :

ref class Sinh_vien

{

public:

String^ Ho_ten; // các biến thành viên

UInt32 MSSV;

const static String^ Nganh_hoc = “Co dien tu” ; // Biến hằng số

};

Các biến PI và E trong class Math là các biến hằng số

Lưu ý : Để khai báo biến hằng số tĩnh, ta có thể dùng từ khóa const static hay literal Hai cách

khai báo này là tương đương nhau

4) Phương thức thành viên (Member Method) :

Cũng giống như biến thành viên, phương thức thành viên đơn giản là các hàm được khai báo bên trong class Cú pháp khai báo các phương thức thành viên cũng tương tự như khi khai báo các hàm thông thường

VD :

ref class Hinh_tron

{

public :

// Variable :

UInt16 R;

// Method :

UInt16 Chu_vi()

{

return 2*(Math::PI)*R;

}

UInt16 Dien_tich()

{

return (Math::PI)*R*R;

}

};

Trong ví dụ trên, có hai phương thức thành viên là Chu_vi() và Dien_tich() Lưu ý là các biến thành viên là các biến toàn cục, do đó ta có thể sử dụng các biến này trong khi khai báo các

Trang 10

phương thức thành viên (hai phương thức thành viên trong ví dụ trên có sử dụng biến thành viên R)

Các phương thức thành viên chỉ có thể được truy xuất thông qua đối tượng bằng toán tử

“->”

Lưu ý : Class cũng cho phép khai báo các phương thức quá tải (overload method) giống như việc

khai báo các hàm quá tải (overload function)

Phương thức tĩnh (static method) :

Phương thức tĩnh cũng tương tự như biến tĩnh : khi khai báo phương thức tĩnh thì thêm từ

khóa static, phương thức tĩnh cũng có thể truy xuất trực tiếp qua tên class và toán tử “::” Tất cả

các biến hay tham số sử dụng trong phương thức tĩnh bắt buộc phải là các biến tĩnh

VD :

ref class Sinh_vien

{

public:

// các biến thành viên tĩnh

static String^ Ho_ten = “Nguyen Van A”;

static UInt32 MSSV = 8111111;

static String^ Nganh_hoc = “Co dien tu” ;

// Phương thức tĩnh

static void Show(Sinh_vien^ A)

{

Console ::WriteLine(“Ho va ten : ”+A->Ho_ten);

Console ::WriteLine(“MSSV : ”+A->MSSV);

Console ::WriteLine(“Nganh hoc : ”+A->Nganh_hoc);

}

};

void main(void)

{

Sinh_vien^ A;

A->Ho_ten = “Nguyen Van B”;

Sinh_vien::Show(A);

Console::ReadKey();

}

Kết quả in ra màn hình : Ho va ten : Nguyen Van B

Ngày đăng: 29/06/2014, 02:20

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w