Bối cảnh và vấn đề nghiên cứu

Trong kỹ thuật phần mềm, phương pháp lập trình hướng đối tượng (Object-Oriented Programming - OOP) trên nền tảng Microsoft .NET nói chung và ngôn ngữ Visual Basic .NET (VB.NET) nói riêng cung cấp khả năng trừu tượng hóa và đóng gói mạnh mẽ. Tuy nhiên, việc xây dựng các ứng dụng giao diện đồ họa (GUI) truyền thống thường gặp vấn đề nghiêm trọng về mặt cấu trúc: các thành phần lưu trữ dữ liệu, giao diện hiển thị và logic điều khiển thường bị gộp chung vào một lớp duy nhất. Cách tiếp cận này làm cho mã nguồn trở nên cồng kềnh, giảm tính linh hoạt, gây khó khăn cho công tác bảo trì, kiểm thử và hạn chế khả năng tái sử dụng (reuse ability) trong quy trình phát triển ứng dụng nhanh (Rapid Application Development - RAD).

Để giải quyết tình trạng phụ thuộc chặt chẽ giữa giao diện và dữ liệu, mô hình kiến trúc Model-View-Controller (MVC) được áp dụng nhằm tách biệt ứng dụng thành ba thành phần độc lập: lớp dữ liệu (Model), lớp hiển thị (View) và lớp điều khiển tương tác (Controller). Trên cơ sở thực tiễn đó, đồ án tốt nghiệp tập trung vào hai trục nội dung then chốt: hệ thống hóa lý thuyết lập trình hướng đối tượng trong môi trường VB.NET và vận dụng mô hình kiến trúc MVC để thiết kế một thành phần điều khiển giao diện tùy biến (custom control).

Nhiệm vụ nghiên cứu của đồ án được xác định cụ thể theo các nội dung sau:

  1. Hệ thống hóa toàn diện các nguyên lý và kỹ thuật lập trình hướng đối tượng trong ngôn ngữ VB.NET, bao gồm lớp, đối tượng, phương thức khởi tạo, thành viên dùng chung, quan hệ kết hợp, quan hệ kế thừa, tính đa hình, lớp trừu tượng, giao diện, ủy quyền (delegate) và cơ chế sự kiện (event).
  2. Phân tích nguyên lý hoạt động, mối quan hệ tương tác và cơ chế đồng bộ trạng thái (Observer) giữa ba thành phần Model, View và Controller trong mô hình MVC.
  3. Thiết kế và cài đặt thực nghiệm thành phần điều khiển soạn thảo văn bản StyledTextArea bằng ngôn ngữ VB.NET dựa trên cấu trúc phân tầng của mô hình MVC.
  4. Đóng gói thành phần điều khiển thành tệp thư viện liên kết động (.dll), thực hiện nhúng vào thanh công cụ và xây dựng ứng dụng giao diện minh họa hoàn chỉnh để kiểm chứng khả năng tái sử dụng.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Các đặc trưng lập trình hướng đối tượng của ngôn ngữ VB.NET trên nền tảng .NET Framework; mô hình kiến trúc phần mềm Model-View-Controller; quy trình thiết kế và đóng gói thành phần điều khiển văn bản tùy biến.
  • Phạm vi không gian và thời gian: Đồ án tốt nghiệp đại học thuộc Bộ môn Tin, Khoa Toán - Tin, Trường Đại học Sư phạm Thành phố Hồ Chí Minh, thực hiện bởi sinh viên Nguyễn Văn Thuận dưới sự hướng dẫn của ThS. Lê Minh Trung, hoàn thành vào năm 2007.

Cơ sở lý thuyết và phương pháp

Khung lý thuyết của đồ án được xây dựng dựa trên hai nền tảng chính:

  • Lý thuyết lập trình hướng đối tượng trên .NET: Tập trung vào các cơ chế trừu tượng hóa dữ liệu (Data Abstraction), bao bọc và che giấu thông tin (Encapsulation), tái sử dụng mã nguồn thông qua kế thừa (Inheritance) và liên kết động thông qua đa hình (Polymorphism). Hệ thống lý thuyết cũng bao hàm các khái niệm chuyên sâu trong VB.NET như thành viên chia sẻ (Shared), hằng số và trường chỉ đọc (Const và ReadOnly), cơ chế thu gom rác tự động (Garbage Collector và phương thức Finalize), con trỏ hàm an toàn (Delegate) và cơ chế phát tín hiệu (Event).
  • Mô hình kiến trúc phần mềm MVC (Model - View - Controller): Khung kiến trúc phân tách một hệ thống thành ba phân vùng chức năng:
    • Model: Chịu trách nhiệm quản lý cấu trúc dữ liệu và trạng thái nghiệp vụ của đối tượng.
    • View: Đảm nhận nhiệm vụ biểu diễn trực quan dữ liệu từ Model lên giao diện người dùng.
    • Controller: Tiếp nhận và xử lý các hành động tương tác ngoại vi (bàn phím, chuột) từ người dùng, cập nhật dữ liệu vào Model và điều phối hiển thị của View.
    • Mô hình quan sát (Observer pattern): Cơ chế kết nối giữa Model và View, cho phép Model tự động phát tín hiệu thông báo cho View mỗi khi trạng thái dữ liệu nội bộ có sự biến động.

Phương pháp nghiên cứu thực tế được tác giả triển khai bao gồm:

  • Phương pháp phân tích - tổng hợp lý thuyết: Hệ thống hóa các đặc điểm cú pháp, quy tắc hướng đối tượng và cơ chế quản lý bộ nhớ của VB.NET; phân tích nguyên lý phân tách trách nhiệm trong thiết kế giao diện người dùng.
  • Phương pháp thiết kế hướng đối tượng: Xây dựng sơ đồ phân cấp lớp, định nghĩa giao diện (Interface), xác lập quan hệ "IS-A" (kế thừa) và quan hệ "HAS-A" (kết hợp) cho các mô hình nghiệp vụ minh họa.
  • Phương pháp thực nghiệm phần mềm: Lập trình hiện thực hóa các lớp thành phần CModel, CView, CController cho điều khiển StyledTextArea; biên dịch thành thư viện động và tích hợp vào ứng dụng Windows Forms để kiểm tra các luồng xử lý tương tác và cập nhật giao diện.

Nguồn dữ liệu nghiên cứu là các thông số kỹ thuật, cấu trúc lớp và mã nguồn chương trình mẫu do tác giả tự xây dựng trong môi trường Microsoft .NET (bao gồm các lớp thực nghiệm CTime, CTime2, CDay, CEmployee, CEmployee3, CCircleConstants, CPoint, CCircle và hệ thống lớp điều khiển StyledTextArea).

Thiết kế và triển khai

Căn cứ vào mô hình kiến trúc MVC, tác giả đã thiết kế và triển khai thành phần điều khiển soạn thảo văn bản StyledTextArea thành các module độc lập:

Thành phần Tên lớp / Cấu trúc Vai trò và các thành viên kỹ thuật chính
Model CModel - Lưu trữ toàn bộ nội dung văn bản bằng cấu trúc mảng động Private list As New ArrayList(1024).
- Trường nội bộ: longestLineCharCountField As Integer.
- Thuộc tính chỉ đọc: CharCount (tổng ký tự của tất cả các dòng, không tính ký tự ngắt dòng), LineCount (trả về list.Count), LongestLineCharCount (số ký tự của dòng dài nhất).
- Sự kiện kích hoạt: Public Event LineCountChanged As LineCountEventHandler và Public Event LongestLineCharCountChanged As LineEventHandler.
View CView - Giữ tham chiếu đến đối tượng CModel và CController.
- Thực hiện kết xuất đồ họa văn bản lên màn hình dựa trên dữ liệu hàng và cột từ list.
- Lắng nghe các sự kiện thay đổi từ Model để vẽ lại giao diện tương ứng.
Controller CController - Tiếp nhận các thông điệp thao tác từ thiết bị nhập (phím bấm, chuột).
- Ánh xạ các thao tác nhập liệu thành lời gọi phương thức cập nhật trên CModel (thêm, xóa, chỉnh sửa dòng/ký tự) và yêu cầu View làm mới trạng thái hiển thị.
User Control StyledTextArea - Lớp bao bọc (wrapper) hợp nhất bộ ba Model - View - Controller thành một điều khiển hoàn chỉnh.
- Cung cấp giao diện công khai để các ứng dụng bên ngoài có thể nhúng và tương tác.

Quy trình triển khai và kiểm thử tái sử dụng điều khiển diễn ra qua các giai đoạn:

  1. Đóng gói thư viện: Biên dịch toàn bộ mã nguồn của thành phần điều khiển thành tệp thư viện liên kết động StyledTextArea.dll.
  2. Nhúng vào môi trường phát triển: Thêm tệp .dll vào thanh công cụ (Toolbox) hoặc thông qua cơ chế tham chiếu dự án (Project Reference) trong môi trường phát triển ứng dụng.
  3. Xây dựng ứng dụng minh họa:
    • Form chính (Main Form): Cửa sổ chứa ứng dụng, thiết lập hệ thống menu điều hướng bao gồm menu File (quản lý tệp) và menu Window (quản lý đa cửa sổ làm việc).
    • Form con (Child Form): Form soạn thảo trực tiếp nhúng điều khiển StyledTextArea, cài đặt đầy đủ các chức năng xử lý văn bản phân chia theo menu File (tạo mới, mở, lưu), menu Edit (cắt, chép, dán, hoàn tác) và menu Format (thiết lập phông chữ, định dạng hiển thị).
' Trích đoạn cài đặt thuộc tính tính toán trong lớp Model của StyledTextArea
Public ReadOnly Property CharCount() As Integer
    Get
        Dim i, total As Integer
        For i = 0 To LineCount - 1
            total = total + list(i).Length
        Next i
        Return total
    End Get
End Property

Public ReadOnly Property LongestLineCharCount() As Integer
    Get
        Dim lineCount As Integer = list.Count
        If lineCount = 0 Then
            Return 0
        Else
            Dim i, max As Integer
            For i = 0 To lineCount - 1
                Dim thisLineCharCount As Integer = CType(list(i), String).Length
                If thisLineCharCount > max Then
                    max = thisLineCharCount
                End If
            Next
            Return max
        End If
    End Get
End Property

Nội dung chính theo từng chương

Chương 1: Lập trình hướng đối tượng trong VB.NET

Chương này trình bày toàn diện hệ thống lý thuyết và cú pháp của lập trình hướng đối tượng trong VB.NET thông qua các ví dụ thực nghiệm cụ thể:

  • Khái niệm Lớp (Class) và Đối tượng (Object): Lớp đóng vai trò như một khuôn mẫu (bản thiết kế) bao bọc các biến thể hiện (instance variables) và phương thức (methods). Tác giả lấy ví dụ bài toán thiết kế lớp biểu diễn thời gian CTime và phân tích cách che giấu dữ liệu bằng các thuộc tính (Property) đi kèm khối truy xuất Get (đọc giá trị) và Set (gán giá trị).
  • Phương thức khởi tạo (Constructor) và nạp chồng (Overload): Trình bày phương thức Sub New() dùng để khởi tạo giá trị ban đầu cho đối tượng. Phân tích chi tiết kỹ thuật nạp chồng constructor qua lớp CTime2 với 6 chữ ký khác nhau: constructor mặc định không tham số, constructor 1 tham số (giờ), 2 tham số (giờ, phút), 3 tham số (giờ, phút, giây), constructor có tham số tùy chọn (Optional), và copy constructor nhận một đối tượng CTime2 khác làm tham số khởi tạo.
  • Lớp kết hợp (Composition Class): Minh họa cấu trúc đối tượng chứa tham chiếu đến đối tượng của lớp khác (quan hệ "HAS-A") thông qua lớp CEmployee chứa hai thành viên kiểu đối tượng CDay là ngày sinh (mBirthDate) và ngày vào làm (mHireDate).
  • Từ khóa Me và Quản lý bộ nhớ: Giải thích cách sử dụng từ khóa Me để tham chiếu trực tiếp đến đối tượng hiện tại. Trình bày cơ chế thu gom rác tự động (Garbage Collector - GC) và phương thức hủy Protected Overrides Sub Finalize(). Tác giả nhấn mạnh không nên phụ thuộc hoàn toàn vào GC mà cần chủ động giải phóng các tài nguyên như kết nối mạng (Network Connection) hay luồng dữ liệu (Stream).
  • Thành viên chia sẻ (Shared) và Hằng số:
    • Shared Member: Thành viên dữ liệu hoặc phương thức dùng chung cho toàn bộ thể hiện của lớp (truy cập qua cú pháp ClassName.SharedMember), minh họa qua biến đếm số lượng đối tượng mCount và thuộc tính Count trong lớp CEmployee3.
    • Const và ReadOnly: Phân biệt thành viên hằng số mức lớp Const và thành viên chỉ đọc ReadOnly (chỉ được gán giá trị một lần duy nhất trong constructor Sub New), minh họa qua lớp CCircleConstants với hằng số PI và trường RADIUS.
  • Không gian tên (Namespace) và Khả năng tái sử dụng (RAD): Giải thích vai trò của Namespace trong việc phân cấp cấu trúc mã nguồn và chống xung đột tên (name collision); sử dụng công cụ Object Browser để khảo sát cấu trúc lớp nhằm phục vụ phát triển ứng dụng nhanh.
  • Tính kế thừa (Inheritance): Phân tích mối quan hệ "IS-A", cấu trúc lớp cơ sở (Base class) và lớp dẫn xuất (Derived class) sử dụng từ khóa Inherits. Khảo sát các mức độ truy cập: Public, Private, Protected (cho phép truy cập trong nội bộ lớp cha và lớp con), Friend (cho phép truy cập trong cùng một assembly). Giới thiệu lớp gốc System.Object và từ khóa Overridable cho phép ghi đè phương thức.
  • Tính đa hình (Polymorphism): Phân tích bản chất của đa hình khi phương thức được thực thi dựa trên kiểu của đối tượng thực sự được tham chiếu thay vì kiểu của biến tham chiếu. Tác giả phân tích bốn trường hợp gán tham chiếu:
    1. Biến lớp cha trỏ đối tượng lớp cha: An toàn.
    2. Biến lớp con trỏ đối tượng lớp con: An toàn.
    3. Biến lớp con trỏ đối tượng lớp cha: Nguy hiểm, gây lỗi biên dịch hoặc phát sinh ngoại lệ System.InvalidCastException, yêu cầu phải ép kiểu bằng hàm CType.
    4. Biến lớp cha trỏ đối tượng lớp con: An toàn, là nền tảng cốt lõi của tính đa hình.
  • Lớp trừu tượng, Giao diện, Delegate và Sự kiện:
    • Lớp trừu tượng (MustInherit) và Phương thức trừu tượng (MustOverride): Dùng làm lớp cơ sở cho các lớp con kế thừa và bắt buộc phải viết lại mã. Ngược lại, lớp NotInheritable và phương thức NotOverridable ngăn chặn việc kế thừa hay ghi đè.
    • Giao diện (Interface): Cung cấp tập hợp thuộc tính và phương thức trừu tượng cho các lớp không có quan hệ phả hệ cùng cài đặt (ví dụ thuộc tính Age, Name trên các đối tượng Person, Tree, Car, File).
    • Ủy quyền (Delegate) và Sự kiện (Event): Delegate đóng vai trò là kiểu dữ liệu tham chiếu đến hàm/thủ tục với chữ ký xác định. Event dùng để phát tín hiệu trong VB.NET (lưu ý VB.NET không hỗ trợ thừa kế hay nạp chồng sự kiện).

Chương 2: Mô hình MVC và đồ án minh họa

Nội dung chương 2 tập trung vào việc mô tả kiến trúc MVC và chi tiết thiết kế điều khiển văn bản tùy biến:

  • Nguyên lý kiến trúc MVC: Phân tích ưu điểm của việc chia nhỏ ứng dụng thành ba thành phần Model, View và Controller so với kiến trúc đơn khối truyền thống. Phân tích luồng tương tác thực tế dựa trên ví dụ phần mềm Microsoft Excel (dữ liệu dạng bảng đóng vai trò Model, biểu đồ tròn hay đồ thị tuyến tính là các View khác nhau, thao tác nhập liệu của người dùng được Controller tiếp nhận và xử lý).
  • Thiết kế chi tiết lớp CModel:
    • Cài đặt danh sách mảng động list (kiểu ArrayList) với kích thước khởi tạo 1024 phần tử để lưu trữ các dòng văn bản.
    • Cài đặt hai sự kiện: LineCountChanged (phát sinh khi số lượng hàng trong list thay đổi) và LongestLineCharCountChanged (phát sinh khi độ dài ký tự của dòng dài nhất có sự thay đổi).
    • Cài đặt các thuộc tính cốt lõi: LineCount (đếm số dòng), LongestLineCharCount (tìm độ dài dòng lớn nhất) và CharCount (tính tổng ký tự của toàn bộ văn bản).
  • Thiết kế lớp CView và CController:
    • Lớp CView nhận tham chiếu từ CModel để kết xuất đồ họa các ký tự và dòng văn bản lên màn hình.
    • Lớp CController lắng nghe các sự kiện bàn phím và chuột, gọi các phương thức tương ứng trên CModel để cập nhật dữ liệu và gửi chỉ thị cho CView làm mới khung nhìn.
  • Tích hợp thành phần điều khiển StyledTextArea: Kết hợp các lớp Model, View và Controller thành một User Control hoàn chỉnh, cung cấp giao diện lập trình trực quan.

Chương 3: Sử dụng điều khiển StyledTextArea trong các đồ án khác

Chương 3 trình bày các bước thực hành để đưa thành phần điều khiển vào môi trường ứng dụng thực tế:

  • Biên dịch thư viện: Đóng gói toàn bộ cấu trúc mã nguồn của StyledTextArea thành tệp thư viện động .dll.
  • Quy trình nhúng điều khiển: Hướng dẫn các bước cấu hình môi trường phát triển để đưa điều khiển tùy biến vào thanh công cụ Toolbox hoặc bổ sung vào danh sách References của dự án mới.
  • Thiết kế giao diện và viết mã ứng dụng mẫu:
    • Xây dựng Form chính làm khung chứa giao diện, thiết lập hệ thống menu cấp cao: menu File và menu Window.
    • Thiết kế Form con chứa điều khiển StyledTextArea đã nhúng, viết mã chi tiết cho các chức năng trong menu File (mở, lưu tệp), menu Edit (thao tác văn bản) và menu Format (định dạng văn bản).

Kết quả và đóng góp

Đồ án đã đạt được các kết quả kỹ thuật cụ thể sau:

  • Xây dựng hoàn chỉnh tài liệu hệ thống hóa các nguyên lý lập trình hướng đối tượng trong VB.NET với các cấu trúc mã nguồn mẫu về nạp chồng constructor, quan hệ kết hợp, quan hệ kế thừa, đa hình, giao diện và sự kiện.
  • Cài đặt thành công thành phần điều khiển StyledTextArea áp dụng mô hình kiến trúc MVC, trong đó tách biệt hoàn toàn phần quản lý dữ liệu (CModel với cấu trúc ArrayList), phần hiển thị (CView) và phần xử lý tương tác (CController).
  • Đóng gói thành công thành phần điều khiển thành tệp thư viện liên kết động StyledTextArea.dll có khả năng tái sử dụng độc lập.
  • Xây dựng ứng dụng soạn thảo văn bản Windows Forms hoàn chỉnh, kiểm chứng thành công việc nhúng điều khiển tùy biến và thực thi đầy đủ các chức năng trên hệ thống menu File, Edit, Format và Window.

Về mặt giải pháp và kiến nghị kỹ thuật:

  • Đề xuất áp dụng mô hình kiến trúc MVC vào việc thiết kế các điều khiển giao diện phức tạp nhằm tăng tính mềm dẻo, dễ kiểm thử và tạo điều kiện phát triển ứng dụng nhanh (RAD).
  • Khuyến nghị quản lý tài nguyên hệ thống một cách chủ động (như đóng mở kết nối và luồng dữ liệu) thay vì phụ thuộc hoàn toàn vào cơ chế thu gom rác tự động (Garbage Collector).

Về mặt đóng góp học thuật và ứng dụng:

  • Cung cấp một mô hình thực nghiệm trực quan kết hợp giữa lý thuyết OOP nâng cao và kiến trúc phần mềm MVC trên nền tảng VB.NET.
  • Chứng minh tính khả thi của việc xây dựng các thành phần điều khiển tùy biến có cấu trúc chuẩn mực để tái sử dụng trong các đồ án phát triển ứng dụng desktop.

Hạn chế và hướng nghiên cứu tiếp

Hạn chế của đồ án:

  • Cấu trúc lưu trữ văn bản trong lớp CModel sử dụng mảng động ArrayList nguyên bản, chưa áp dụng các cấu trúc dữ liệu tối ưu hóa chuyên biệt cho văn bản dung lượng cực lớn.
  • Phạm vi ứng dụng minh họa mới dừng lại ở các tính năng soạn thảo và định dạng văn bản cơ bản trên môi trường Windows Forms cục bộ của .NET Framework (năm 2007).

Hướng nghiên cứu tiếp:

  • Tối ưu hóa hiệu năng của lớp CModel và thuật toán kết xuất đồ họa của lớp CView để xử lý mượt mà các tệp văn bản có kích thước lớn.
  • Mở rộng các tính năng định dạng nâng cao cho điều khiển StyledTextArea (hỗ trợ văn bản đa định dạng phong phú hơn).
  • Mở rộng và chuyển đổi mô hình kiến trúc MVC sang các nền tảng ứng dụng phân tán hoặc ứng dụng web.

Giá trị tham khảo

Đồ án là tài liệu kỹ thuật có giá trị tham khảo thiết thực cho:

  • Sinh viên ngành Sư phạm Tin học, Công nghệ Thông tin, Kỹ thuật Phần mềm: Dùng làm tài liệu học tập có hệ thống về các khái niệm cốt lõi của lập trình hướng đối tượng trên ngôn ngữ VB.NET (đặc biệt là cơ chế nạp chồng constructor, thành viên chia sẻ, quan hệ kế thừa, đa hình và sự kiện).
  • Người phát triển ứng dụng trên nền tảng .NET: Tham khảo quy trình thiết kế và phân tầng kiến trúc MVC khi xây dựng các thành phần điều khiển giao diện tùy biến (Custom Controls / User Controls).
  • Nội dung nổi bật đáng tham khảo: Phần phân tích chi tiết cấu trúc lớp CModel (cách quản lý danh sách dòng, cài đặt sự kiện LineCountChanged, LongestLineCharCountChanged) và quy trình đóng gói thư viện .dll để nhúng vào ứng dụng thực tế tại Chương 2 và Chương 3.

Câu hỏi thường gặp

1. Lớp CModel trong thành phần điều khiển StyledTextArea quản lý dữ liệu văn bản bằng cấu trúc nào và phát sinh những sự kiện gì?
Lớp CModel sử dụng cấu trúc mảng động ArrayList (khởi tạo với dung lượng New ArrayList(1024)) để lưu trữ các dòng văn bản. Lớp này định nghĩa hai sự kiện công khai: sự kiện LineCountChanged (kích hoạt khi số lượng dòng trong danh sách thay đổi) và sự kiện LongestLineCharCountChanged (kích hoạt khi độ dài ký tự của dòng dài nhất có sự biến động).

2. Điểm khác biệt căn bản giữa thành viên dữ liệu Const và ReadOnly trong VB.NET được đồ án chỉ ra là gì?
Thành viên Const là hằng số mức lớp dùng chung, giá trị của nó được ấn định cố định và không thể thay đổi. Thành viên ReadOnly là trường dữ liệu chỉ đọc, có thể được cấp phát và gán giá trị một lần duy nhất trong phương thức khởi tạo (Sub New), sau đó giá trị này sẽ không thể sửa đổi trong suốt vòng đời của đối tượng.

3. Bốn trường hợp gán tham chiếu trong tính đa hình được tác giả phân tích như thế nào?
Bốn trường hợp bao gồm: (1) Biến lớp cha tham chiếu đối tượng lớp cha (an toàn); (2) Biến lớp con tham chiếu đối tượng lớp con (an toàn); (3) Biến lớp con tham chiếu đối tượng lớp cha (nguy hiểm, phát sinh lỗi biên dịch hoặc ngoại lệ System.InvalidCastException, đòi hỏi phải chuyển đổi kiểu bằng CType); (4) Biến lớp cha tham chiếu đối tượng lớp con (an toàn, khi gọi phương thức bị ghi đè thì phương thức của đối tượng thực sự được trỏ tới sẽ thực thi — đây là nền tảng của tính đa hình).

4. Quy trình tái sử dụng thành phần điều khiển StyledTextArea trong các dự án phần mềm khác gồm những bước nào?
Quy trình gồm 3 bước: đầu tiên, biên dịch mã nguồn của điều khiển thành tệp thư viện liên kết động StyledTextArea.dll; tiếp theo, nhúng thư viện này vào môi trường phát triển của ứng dụng mới thông qua thanh công cụ Toolbox hoặc bổ sung vào References; cuối cùng, kéo thả hoặc khởi tạo điều khiển trên Form của ứng dụng và viết mã tương tác.

5. Thuộc tính CharCount trong lớp CModel được tính toán theo nguyên tắc nào?
Thuộc tính chỉ đọc CharCount thực hiện duyệt qua tất cả các dòng từ chỉ số 0 đến LineCount - 1 trong danh sách list để cộng dồn chiều dài chuỗi (list(i).Length) của từng dòng, qua đó trả về tổng số ký tự của toàn bộ văn bản mà không tính các ký tự ngắt dòng.

Kết luận

Đồ án tốt nghiệp của tác giả Nguyễn Văn Thuận đã hệ thống hóa toàn diện các nguyên lý cốt lõi của lập trình hướng đối tượng trong môi trường VB.NET. Tác giả đã vận dụng thành công mô hình kiến trúc MVC để thiết kế và cài đặt thành phần điều khiển văn bản tùy biến StyledTextArea với sự phân tách độc lập giữa lớp dữ liệu, lớp hiển thị và lớp điều khiển. Sản phẩm được đóng gói hoàn chỉnh thành tệp thư viện .dll và tích hợp hiệu quả vào ứng dụng Windows Forms minh họa, chứng minh tính khả thi của việc nâng cao chất lượng cấu trúc mã nguồn và tối ưu hóa khả năng tái sử dụng trong kỹ thuật phần mềm.