Thiết kế và sử dụng các lớp học

Đã hoàn thành

Trong lập trình hướng đối tượng (OOP), các lớp là các khối dựng của một ứng dụng. Cần hiểu mối quan hệ giữa các lớp và đối tượng.

  • Các lớp học là những bản thiết kế mà các nhà phát triển sử dụng để xác định các thuộc tính (dữ liệu) và phương pháp (hành vi) của các đối tượng. Lớp học cung cấp một cách để đóng gói dữ liệu và hành vi, giúp bạn dễ dàng sắp xếp và quản lý mã hơn.
  • Đối tượng là thể hiện của lớp. Khi khởi tạo một lớp học, một đối tượng được tạo ra trong bộ nhớ. Mỗi đối tượng có một tập hợp các thuộc tính và phương pháp riêng, nhưng có chung một cấu trúc do lớp xác định.

Việc kiểm tra các đối tượng trong thế giới thực xung quanh bạn có thể giúp bạn hiểu cách các lớp học và đối tượng hoạt động trong lập trình. Các đối tượng trong thế giới thực có các thuộc tính (thuộc tính) và hành vi (phương pháp) xác định mục đích và chức năng của chúng. Ví dụ: ô tô là đối tượng có các thuộc tính như nhà sản xuất, kiểu xe, màu và các hành vi như lái xe và dừng xe.

Đối tượng trong thế giới thực

Con người tương tác với các đối tượng liên tục trong cuộc sống hàng ngày của họ. Trên thực tế, gần như mọi thứ mà chúng ta tương tác có thể được xem như một đối tượng.

Các tiêu chí sau đây có thể được sử dụng để xác định các đối tượng trong thế giới thực:

  • Đối tượng là những thứ mà chúng ta có thể nhìn thấy và chạm vào.
  • Đối tượng có một mục đích.
  • Đối tượng có các phần hỗ trợ mục đích của chúng.

Bút chì là một ví dụ về một đối tượng vật lý. Mục đích của bút chì là tạo ghi chú hoặc bản vẽ. Các bộ phận của bút chì bao gồm cơ thể, đầu bút và có thể là tẩy. Các bộ phận làm việc cùng nhau để đạt được mục đích dự định của bút chì.

Cũng có các đối tượng vật lý tồn tại như là một lắp ráp của các đối tượng khác. Danh sách sau đây cung cấp ví dụ về các đối tượng bao gồm các đối tượng khác:

  • Một chiếc xe: Mục đích của một chiếc xe là để cung cấp vận chuyển mặt đất cho các cá nhân và gia đình. Các bộ phận của một chiếc xe bao gồm một động cơ, các bánh xe, một vô lăng, và nhiều người khác. Các bộ phận của một chiếc xe làm việc cùng nhau để cho phép vận chuyển mặt đất.
  • Một ngôi nhà: Mục đích của một ngôi nhà là để cung cấp nơi trú ẩn. Các phần của ngôi nhà bao gồm nền móng, tường bên ngoài, mái nhà và phòng. Các phần này hoạt động cùng nhau để tạo ra một không gian sống.
  • Điện thoại thông minh: Mục đích của điện thoại thông minh là hỗ trợ người dùng thực hiện các công việc và hoạt động hàng ngày. Các bộ phận của điện thoại thông minh bao gồm màn hình, bộ vi xử lý, bộ nhớ và bộ nhớ, pin, camera và nút bấm. Các phần này hoạt động cùng nhau để cho phép các tính năng giao tiếp, giải trí và năng suất.

Mỗi bộ phận của một chiếc xe hơi, nhà, hoặc điện thoại thông minh là một đối tượng với mục đích riêng của mình và cũng có thể là một lắp ráp các đối tượng.

Thuộc tính và tính năng của đối tượng vật lý

Dành một phút để xem xét ví dụ về bút chì. Bút chì có các phần (thân, đầu, tẩy) và một mục đích (tạo ghi chú hoặc bản vẽ). Bút chì có chung những đặc điểm cơ bản này. Tuy nhiên, không phải tất cả bút chì đều giống nhau.

Một số bút chì ngắn, một số dài. Một số bút chì có màu vàng, một số có màu đen. Một số bút chì có đầu mờ, một số bút có đầu mài nhọn. Một số bút chì có tẩy, một số bút chì không có tẩy.

Các thuộc tính của một đối tượng thường được chia thành các thể loại vật lý và hành vi sau đây:

  • Vật lý: Thuộc tính vật lý là các khía cạnh của một đối tượng có thể được nhìn thấy hoặc đo.
  • Hành vi: Các thuộc tính hành vi là các khía cạnh của một đối tượng mô tả khả năng của nó hoặc tương tác với các đối tượng khác.

Đối với ví dụ bút chì, các thuộc tính vật lý bao gồm chiều dài của cơ thể, màu sắc của cơ thể, độ sắc nét của đầu bút và bút chì có tẩy hay không. Các thuộc tính hành vi bao gồm khả năng viết, khả năng xóa và khả năng được làm sắc nét. Bút chì tương tác với giấy hoặc các đối tượng đặc khác có thể được viết hoặc vẽ trên đó.

Thuộc tính vật lý thường được gọi là thuộc tính, trong khi các thuộc tính hành vi thường được gọi là hàm (phương pháp lập trình C#).

Các lớp mã và đối tượng trong lập trình C#

Trong thế giới lập trình C#, thuộc tính đối tượng và phương pháp được xác định bởi một lớp. Lớp học cung cấp bản thiết kế cho những gì một đối tượng (một trường hợp của lớp) có thể làm. Bản thiết kế cho lớp được gọi là định nghĩa lớp.

Khi một ứng dụng đang chạy, máy tính sử dụng một định nghĩa lớp để phân bổ bộ nhớ cho một đối tượng (một trường hợp của lớp). Máy tính sử dụng bản thiết kế để đặt cấu hình một khối bộ nhớ có kích thước phù hợp với đối tượng. Một đối tượng về cơ bản là một khối bộ nhớ.

Đối tượng mã, giống như đối tượng vật lý, có thể có các giá trị khác nhau được gán cho thuộc tính của nó.

Lớp đóng gói dữ liệu và hành vi

Lớp học cung cấp một cách để đóng gói dữ liệu và hành vi. Đóng gói là quá trình kết hợp dữ liệu và hành vi thành một đơn vị duy nhất. Lớp học sử dụng thuộc tính để cho phép truy nhập vào dữ liệu và phương pháp để cho phép hành vi.

Thuộc tính lớp

Thuộc tính lớp được sử dụng để quản lý dữ liệu phân biệt một đối tượng (phiên bản lớp) với một đối tượng khác cùng loại.

Thuộc tính lớp cho phép các đối tượng đọc, ghi hoặc tính giá trị của các biến (trường dữ liệu) được xác định trong lớp. Thuộc tính xuất hiện dưới dạng thành viên dữ liệu công cộng, nhưng chúng được thực hiện như các phương pháp đặc biệt được gọi là truy. Tính năng này cho phép người gọi truy nhập dữ liệu dễ dàng và vẫn giúp tăng cường sự an toàn và linh hoạt của dữ liệu.

Bạn có thể đọc các giá trị thuộc tính bằng get truy nhập mới và được gán bằng cách sử dụng set truy nhập khác.

Phương thức lớp học

Phương pháp lớp xác định các hành động (hành vi) mà một lớp học có thể thực hiện.

Các phương pháp có thể lấy các tham số cung cấp dữ liệu đầu vào và có thể trả về dữ liệu đầu ra thông qua các tham số. Các phương pháp cũng có thể trả về một giá trị trực tiếp mà không cần sử dụng tham số.

Ví dụ, lớp Console bao gồm các phương pháp WriteLine, ReadLine, và Clear (trong số các phương pháp khác). Những phương pháp này giúp cho phép các hành vi dự kiến của Console lớp. Các phương pháp có thể được sử dụng để thực hiện các hành động, chẳng hạn như tính toán, thao tác dữ liệu hoặc tương tác với các đối tượng khác.

Các phương pháp thường được thiết kế để chấp nhận một hoặc nhiều tham đối phương pháp. Các đối số phương pháp được chuyển tới phương thức như là các tham số của câu lệnh gọi được dùng để gọi phương thức. Ví dụ: phương thức WriteLine của lớp Console thể chấp nhận đối số chuỗi được cung cấp bởi câu lệnh gọi.

Định nghĩa lớp trong mã C#

Ví dụ sau đây cho thấy một lớp đơn giản trong C#. Lớp Phone có các thuộc tính cho Brand, Model, và Year. Lớp học cũng bao gồm các phương pháp CallText.


public class Phone
{
    public string? Brand { get; set; }
    public string? Model { get; set; }
    public int Year { get; set; }

    public void Call(string phoneNumber)
    {
        Console.WriteLine($"Calling {phoneNumber}...");
    }

    public void Text(string phoneNumber, string message)
    {
        Console.WriteLine($"Texting {phoneNumber}: {message}");
    }
}

Sử dụng không gian tên

Trong lập trình C#, không gian tên được sử dụng theo hai cách:

  • Thư viện lớp .NET sử dụng không gian tên để sắp xếp nhiều lớp của nó.
  • Các nhà phát triển tuyên bố không gian tên của riêng mình để giúp kiểm soát phạm vi tên lớp và phương pháp trong các dự án lập trình lớn hơn.

Không gian tên trong thư viện lớp .NET

Không gian tên được thư viện lớp .NET sử dụng để nhóm các kiểu có liên quan lại với nhau, giúp bạn dễ dàng tìm và sử dụng chúng hơn.

Hãy cân nhắc các đoạn mã sau đây:


System.Console.WriteLine("Hello World!");

Trong ví dụ này, System là không gian tên và Console là lớp trong không gian tên đó.

Cung cấp tên đủ điều kiện của lớp (System.Console) đảm bảo rằng lớp học đúng được sử dụng. Tuy nhiên, việc sử dụng tên đủ điều kiện có thể phức tạp khi làm việc với nhiều lớp từ cùng một không gian tên. Để cải thiện tính dễ đọc của mã, bạn có thể sử dụng chỉ using này. Chỉ thị using cho phép bạn sử dụng các loại được xác định trong không gian tên mà không xác định không gian tên đầy đủ tiêu chuẩn của kiểu đó.

Đoạn mã sau đây thực hiện chỉ thị using để cải thiện khả năng đọc mã:


using System;

Console.WriteLine("Hello World!");

Ghi

Bắt đầu từ .NET 6, các chỉ thịglobal using được thêm vào các dự án C# mới. Điều này có nghĩa là bạn có thể sử dụng các loại được xác định trong các không gian tên này mà không cần phải xác định tên đủ điều kiện của chúng hoặc thêm theo cách thủ công bằng chỉ thị. Các ẩn đề cập đến thực tế là toàn cầu bằng cách sử dụng chỉ thị được thêm vào một tập tin được tạo ra trong thư mục obj của dự án. Tính năng này cho phép bạn sử dụng Console.WriteLine mà không cần khai báo rõ using System khi phát triển ứng dụng trong phiên bản 6.0 trở lên của .NET.

Tổ chức các lớp học với không gian tên

Khai báo không gian tên của riêng bạn có thể giúp bạn kiểm soát phạm vi tên lớp và phương pháp trong các dự án lập trình lớn hơn. Sử dụng từ namespace để khai báo không gian tên.

Hãy cân nhắc các đoạn mã sau đây:


namespace SampleNamespace
{
    class SampleClass
    {
        public void SampleMethod()
        {
            System.Console.WriteLine("SampleMethod inside SampleNamespace");
        }
    }
}

Tên của không gian tên phải là tên mã định danh C# hợp lệ.

Bạn có thể khai báo một không gian tên cho tất cả các kiểu được xác định trong tệp đó, như minh họa trong đoạn mã sau đây:


namespace SampleNamespace;

class SampleClass
{
    public void SampleMethod()
    {
        System.Console.WriteLine("SampleMethod inside SampleNamespace");
    }
}

class AnotherSampleClass
{
    public void AnotherSampleMethod()
    {
        System.Console.WriteLine("AnotherSampleMethod inside SampleNamespace");
    }
}

Ưu điểm của cú pháp mới này là nó đơn giản hơn, tiết kiệm khoảng trống ngang và dấu ngoặc nhọn. Điều đó giúp mã của bạn dễ đọc hơn.

Tổng quan về không gian tên

Không gian tên có các thuộc tính sau:

  • Họ tổ chức các dự án mã lớn.
  • Chúng được phân tách bằng cách sử dụng toán tử . của bạn.
  • Chỉ using thể hiện yêu cầu phải xác định tên của không gian tên cho mỗi lớp.
  • Không gian tên toàn cầu là không gian tên "gốc": global::System luôn tham chiếu đến không gian tên Hệ thống .NET.

Sử dụng không gian tên để nhóm các loại liên quan lại với nhau giúp bạn dễ dàng tìm và sử dụng chúng hơn.