Bài 8: Lớp Và Đối Tượng

0
234

Khi chúng ta bắt tay vào học một ngôn ngữ, chúng ta thường học ngay cách tạo chương trình, cách thiết kế giao diện , viết mã cho chương trình v.v … Tuy nhiên một số khái niệm cơ bản chúng ta không nắm vững và đó là một hệ lụy khi sau này chúng ta tìm hiểu sâu vào nền tảng của ngôn ngữ đó chúng ta sẽ ngặp ngay những khó khăn mà những khó khăn đó lại xuất phát từ nguyên nhân là do những kiến thức cơ bản và nền tảng chúng ta đã quá xem thường chúng .

Trong C# cũng vậy . Thường ngày khi các bạn viết mã cho chường trình các bạn thường thấy từ khóa *class . *Vậy có khi nào các bạn tử hỏi *class *là gì chưa ?

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

dog

a.Lớp (class)

[box type=”info” ]

Một lớp là một khái niệm mô tả cho những thực thể có chung tính chất và hành vi. Lớp định nghĩa những thuộc tính và hành vi được dùng cho những đối tượng của lớp đó. Do đó có thể nói lớp là một khuôn mẫu cho các đối tượng.

[/box]

* Công thức để tạo một class*

AccessModifier class className { // thân class }

Ví dụ tôi định nghĩa một class là color, class này được truy cập public

public class Color { // Nội dung class }

Song song với class *chúng ta sẽ tìm hiểu thêm một khái niệm là *đối tượng

[box type=”info” ]

b.Đối tượng

Đối tượng là một đại diện, hay có thể nói là một sản phẩm của một class. Tất cả các đối tượng đều có chung những thuộc tính và hành vi mà class định nghĩa. Cách tạo đối tượng giống như cách tạo một biến có kiểu dữ liệu là Class.

[/box]

Ví dụ tôi muốn khai báo một đối tượng c là thể hiện của class color nói trên. Tôi làm như sau:

Color c = new Color();

Sau đó từ đối tượng c này tôi sẽ truy cập đến các thành phần của class thông qua toán tử “.” (Mà tôi đã giới thiệu ở bài học số 2). Tuy nhiên việc truy cập các thành phần của class còn tùy thuộc vào thành phần đó là instance hay static. Bạn sẽ được tìm hiểu khái niệm này ở phần tiếp theo của bài học.

c.Ưu điểm khi sử dụng lớp và đối tượng trong lập trình

Có một số những ưu điểm của việc sử dụng Class và đối tượng trong phát triển phần mềm. Những ưu điểm nổi bật nhất được liệt kê như sau:

  • Duy trì code bằng việc mô hình hóa
  • Đóng gói những sự phức tạp trong mã lênh từ người dùng
  • Khả năng sử dụng lại
  • Cung cấp đơn kế thừa để thực thi nhiều phương thức

Các bạn sẽ hiểu hơn về điều này ở các bài học sau của chúng tôi về inheritance (sự thừa kế) hay polymorphism ( Tính đa hình )

2/Khái niệm thành viên thể hiện (instance) và thành viên tĩnh(static)

Trong một lớp , các thành viên có thể là instance (thành viên thể hiện) hoặc static (thành viên tĩnh). Một thành viên instance có nghĩa là thành viên đó liên quan đến thể hiện của một kiểu dữ liệu. Thành viên static được xem như một phần của lớp. Chúng ta truy cập đến thành viên tĩnh của một lớp thông qua tên lớp đã được khai báo. Còn các thành viên instance thì phải thông qua thể hiện của lớp

Giả sử chúng ta có một lớp là class A và có 2 thể hiện là t1, t2 và một phương thức tĩnh là a(). Để truy cập phương thức này ta viết A.a(). Chứ không thể viết t1. a() hoặc t2.a() vì trong C# không cho phép truy cập đến phương thức cũng như các biến thành viên tĩnh thông qua một thể hiện. Một số ngôn ngữ thì có sự phân chia giữa phương thức của lớp và các phương thức khác (toàn cục) tồn tại bên ngoài không phụ thuộc bất cứ một lớp nào. Tuy nhiên, điều này không cho phép trong C#, ngôn ngữ C# không cho phép tạo các phương thức bên ngoài của lớp, nhưng ta có thể tạo được các phương thức giống như vậy bằng cách tạo các phương thức tĩnh bên trong một lớp. Phương thức tĩnh ít nhiều giống phương thức toàn cục bởi ta có thể truy cập đến nó không phải thông qua bất cứ một thể hiện nào của lớp chứa nó. Tuy nhiên phương thức tĩnh sẽ hoạt động tốt hơn phương  thức toàn cục vì nó luôn được đặt trong phạm vi một lớp do đó chúng ta sẽ tránh được tình trạng lộn xộn do bị trùng tên giữa các phương thức đặt trong namespace.

3/Các thành phần của lớp

* a. Fields*

[box type=”info” ]Field là một phần tử dùng để thể hiện các biến trong lớp – các biến hoặc các thể hiện của một lớp [/box]

Ví dụ:

class Color { internal ushort redPart; internal ushort bluePart; internal ushort greenPart; public Color(ushort red, ushort blue, ushort green) { redPart = red; bluePart = blue; greenPart = green; } }

Lớp color chứa các instance fields như là redPart, bluePart, và greenPart.
Fields có thể là static như ví dụ dưới đây:

Class Color { public static Color Red = new Color(0xFF, 0, 0); public static Color Blue = new Color(0, 0xFF, 0); public static Color Green = new Color(0, 0, 0xFF); public static Color White = new Color(0xFF, 0xFF, 0xFF); … }

Các phần tử Red, Blue, Green, White đều là các phần tử static.

* b. Properties*

Property (thuộc tính, đặc tính) là một phần tử dùng để truy cập đến đặc điểm của một đối tượng hoặc một class (lớp). Ví dụ như là độ dài một chuỗi, kích cỡ của font chữ, độ rộng của một cửa sổ, tên của một customer …Property là phần mở rộng của fields. Cả 2 đều được gọi tên với các kiểu kết hợp, và cách truy cập đến fields và properties là như nhau. Tuy nhiên khác với fields, properties không chỉ rõ nới lưu trữ nó. Thay vào đó, properties có cách truy nhập là dùng câu lệnh để thi hành việc đọc và ghi giá trị.

[box type=”info” ]Property được định nghĩa bằng 2 phần. Phần thứ nhất giống như cách định nghĩa Fields. Phần thứ 2 chứa phần tử truy cập get và set. [/box]

Các bạn hãy xem ví dụ dưới đây :

public class Button { private string caption; public string Caption { get { return caption; } set { caption = value; Repaint(); } } }

* c. Methods*

Oa ! Tới đây tôi đã khá mệt . Nên tôi nghĩ phần này tôi sẽ để bài viết sau tôi sẽ trình bày . Còn bây giờ xin chào và hẹn gặp lại các bạn.

* *

LEAVE A REPLY

Please enter your comment!
Please enter your name here