1
Mở đầu
1.1
Chương trình theo kiểu cấu trúc
Để viết một chương trình theo kiểu cấu trúc, chúng ta thường
khai báo và định nghĩa dữ liệu ở một nơi; sau đó, viết các hàm xử lý dữ liệu,
cuối cùng là gọi các hàm thực thi.
Ví dụ, chúng ta viết một chương trình thao tác với tài khoản, gồm các chức năng: nhập tên, xuất tên và sửa tên một tài khoản. Chương trình viết bằng ngôn ngữ C++.
Bạn có thể viết và chạy trên môi trường Visual Studio, hoặc trực tuyến.
Ví dụ: bạn có thể viết và chạy trực tuyến ở đây: https://www.programiz.com/cpp-programming/online-compiler/
[main.cpp]
1 #include <iostream>
2 #include <cstring>
3 using namespace std;
4
5 char tenTK[50];
6
7 void NhapTenTaiKhoan()
8 {
9 cout << "Nhap vao ten tai khoan:";
10 cin >> tenTK;
11 }
12 void XuatTenTaiKhoan()
13 {
14 cout << "Ten tai khoan la:" << tenTK << endl;
15 }
16 void SuaTenTaiKhoan()
17 {
18 char tenMoi[50] = "Virus";
19 strcpy(tenTK, tenMoi);
20 }
21
22 int main()
23 {
24 NhapTenTaiKhoan();
25 XuatTenTaiKhoan();
26 SuaTenTaiKhoan();
27 XuatTenTaiKhoan();
28 return 0;
29 }
Ở chương trình trên, chúng ta khai báo và định nghĩa dữ liệu ở dòng mã số 5, viết các hàm xử lý ở các dòng mã [7-20], cuối cùng là gọi các hàm thực thi ở các dòng [24-27].
Như vậy, việc lập trình sẽ xoay quanh việc định nghĩa cấu trúc dữ liệu cho hợp lý, viết các hàm xử lý trên dữ liệu và gọi hàm thực thi theo một thứ tự nhất định.
1.2 Chương trình theo kiểu hướng đối tượng
Để lập trình theo kiểu hướng đối tượng, chúng ta sẽ có cách
tiếp cận khác so với lập trình theo kiểu hướng cấu trúc.
Về cơ bản, chương trình vẫn gồm các công việc: tổ chức, khai báo dữ liệu; viết các hàm xử lý dữ liệu và gọi hàm thực thi. Tuy nhiên, cách tổ chức các thành phần này có sự khác biệt so với lập trình hướng cấu trúc.
Chúng ta sẽ viết lại chương trình thao tác với tài khoản, để cảm nhận sự khác biệt này.
Trong phần mềm lập trình (Visual Studio hoặc trực tuyến), tạo tập tin AccountTest.cs với nội dung sau (Hình 2):
1 // Hình 2.AccountTest.cs
2 // Tạo và thao tác với một đối tượng của lớp Account
3 using System;
4
5 class AccountTest
6 {
7 static void Main()
8 {
9 // tạo một đối tượng của class Account
10 // và gán cho biến myAccount
11 Account myAccount = new Account();
12
13 // hiển thị tên ban đầu của tài khoản myAccount
14 // (tất nhiên là chưa có tên)
15 Console.WriteLine($"Ten ban dau la: { myAccount.GetName() }");
16
17 // cho người dùng nhập tên và lấy tên đó lưu vào trong tài khoản
18 // nhắc người dùng nhập tên
19 Console.Write("Nhap ten: ");
20 // lấy tên lưu vào biến theName
21 string theName = Console.ReadLine();
22
23 // lưu tên vào đối tượng myAccount
24 myAccount.SetName(theName);
25
26 // hiển thị tên đã được lưu trong đối tượng myAccount
27 Console.WriteLine($"Ten cua tai khoan la: {
myAccount.GetName() }");
28 }
29 }
Tạo tập tin Account.cs với nội dung như sau (Hình 3):
1 // Hình 3. Account.cs
2 // Lớp Account gồm 1 instance variable và
3 // 2 phương thức SetName() và GetName()
4 class Account
5 {
6 // instance variable
7 private string name;
8
9 // phương thức để thiết lập tên cho đối tượng
10 public void SetName(string accountName)
11 {
12 // lưu tên tài khoản
13 name = accountName;
14 }
15
16 // phương thức lấy tên của đối tượng
17 public string GetName()
18 {
19 // trả về tên tài khoản khi phương thức được gọi
20 return name;
21 }
22 }
[Trang programiz không cho tạo thêm tập tin, nên bạn có thể viết mã của class Account ngay phía dưới của class AccountTest.]
Kết quả khi chạy chương trình:
Ten ban dau cua tai khoan la:
Nhap ten: Teo
Ten cua tai khoan la: Teo
1.3 Một số khái niệm
- Lớp (class) là một bản thiết kế (blueprint), được sử dụng
để tạo ra các đối tượng. Ví dụ lớp Account
là bản thiết kế dùng để tạo ra đối tượng “tài khoản ngân hàng”. Thiết kế của lớp
Account cho biết một tài khoản
ngân hàng sẽ gồm các thông tin (thuộc tính) gì, và các thao tác (phương thức)
gì? Lưu ý: lớp AccountTest được
sử dụng để làm đầu vào của chương trình, dùng để thực thi các chức năng chung của
chương trình nên nó khá đặc biệt so với một lớp thông thường.
- Đối tượng (object) là một thực thể (instance) được tạo ra từ một lớp. Mỗi đối tượng sẽ có giá trị thuộc tính của riêng nó. Ví dụ, đối tượng myAccount chính là một thực thể được tạo ra từ lớp Account. Đối tượng myAccount có tên cụ thể là Teo. Bạn có thể hiểu đơn giản hơn, lớp chính là khuôn để làm bánh, mỗi cái bánh làm ra từ cái khuôn đó chính là một đối tượng.
- Biến đối tượng (instance variable): là một biến, được khai báo bên trong một lớp, và thuộc về một đối tượng cụ thể của lớp đó. Nó được dùng để lưu trữ dữ liệu cho đối tượng. Ví dụ: trong lớp Account, name chính là một biến đối tượng, nó được sử dụng để lưu tên của tài khoản.
- Thuộc tính (property) là một thành phần của lớp, nó cung cấp một cách để truy cập và thay đổi giá trị của các biến đối tượng. Thuộc tính thường được sử dụng để kiểm soát cách truy cập vào dữ liệu bên trong của đối tượng. Ví dụ: chúng ta sẽ tạo ra thuộc tính có tên là Name để truy cập vào biến đối tượng name (xem ở phần sau).
- Phương thức (method) là một hàm (function), được định nghĩa bên trong một lớp. Nó thực hiện một hành động nào đó trên đối tượng. Ví dụ, trong lớp Account có 2 phương thức là SetName(), và SetName().
-----
Cập nhật: 6/9/2024
Bài sau: Lập trình hướng đối tượng với C# (2):
-----