Ứng dụng ngôn ngữ lập trình C# trong nghiên cứu và thực hành tại trung tâm nghiên cứu MICA

MỤC LỤC

Mã quản lí và mã không quản lí ( Managed/Unmanaged Code )

Thông thờng, mã quản lí là những mã đợc tích hợp sẵn ở trong các th viện lớp hay những mã đợc dịch bởi một chơng trình dịch tuân theo chuẩn CLS tạo ra ngôn ngữ trung gian. Mã không quản lí (unmanaged code) là những mã không đợc soạn thảo, dịch trong môi trờng .NET và không nhằm mục đích chạy trong CLR tuy nhiên CLR vẫn nạp những mã này vào chạy, nó chỉ không hỗ trợ các dịch vụ cho loại mã này.

Ngôn ngữ trung gian , hệ thống kiểu thông thờng và CLS

Windows APIs, những chơng trình .NET sử dụng Windows APIs có nghĩa là nó đã sử dụng mã không quản lý.

Assembly và metadata

Assembly có thể hiểu nh là một gói cả mã chơng trình, các thành phần, các tài nguyên.  Thông tin về tham chiếu kiểu dữ liệu: CLR sử dụng thông tin này để tìm ra những file định nghĩ kiểu dữ liệu đó.

Chơng trình dịch Just in time

Metadata là tập hợp dữ liệu ở dạng nhị phân diễn tả các thành phần của chơng trình. Metadata đợc lu trữ ở file có thể thực thi ( executable hay .exe , .dll) cùng với mã.

Quản lí bộ nhớ ( Garbage Collection )

GC thực hiện rất nhiều việc, tuy nhiên nó đợc thực thực hiện tự động bằng CLR, giảm nhẹ đi rất nhiều công việc của ngời lập trình.

Lập trình hớng đối tợng trong C#

 Mỗi đối tợng có một giao diện để giao tiếp với các đối tợng khác và một phần dữ liệu đợc che giấu đối với các đối tợng khác. Ngoài ra, C# cúng cho phép ngời lập trình thực hiện các hoạt động sử dụng lại dữ liệu nh kế thừa, đa hình thái và kết tập.

Những đặc điểm của ngôn ngữ C#

     Các lệnh throw, try, catch: các lệnh phục vụ cho quá trình quản lí lỗi trong thời gian chạy ( runtime – error ) gồm có phát ra một lỗi ( throw ), cặp lệnh try – catch đón nhận một lỗi và đa ra hành động xử lí lỗi. Nếu nh trong C, đơn vị chơng trình lớn nhất là các hàm ( modul), trong Java và C++, đơn vị chơng trình lớn nhất là các lớp ( class) thì trong C#, đơn vị chơng trình lớn nhất là không gian tên (namespace).

    C# và những vấn đề nâng cao

    C# với cơ sở dữ liệu

    Hàm main phải là static và xây dựng trong một lớp, có thể trả lại giá trị Int hay không trả về giá trị.

    Đồ họa trong C#

    • Kiến trúc của GDI+
      • Một số điểm mới trong GDI+
        • 2. §êng cong Spline
          • Thay đổi trong mô hình lập trình
            • Giới thiệu các đối tợng đồ họa cơ bản trong GDI+

              Ví dụ, cấu trúc Rectangle lưu trữ thông tin về vị trí và kích cỡ của hình chữ nhật; lớp Pen lưu trữ thông tin về màu sắc, độ rộng đường thẳng và kiểu đường thẳng; Còn lớp Graphics có các phương thức cho dựng đường thẳng, hình chữ nhật, đồ thị và các hình hình học khác. Ngữ cảnh thiết bị và đối tượng Graphics có vai trò tương tự nhau nhưng có một số khác biệt cơ bản giữa mô hình lập trình dựa trên các handle (hay con trỏ) trong GDI và mô hình lập trình hướng đối tượng trong GDI+.

              Hình 8   Hệ trục toạ độ của GDI+
              Hình 8 Hệ trục toạ độ của GDI+

              Đa luồng trong C#

              Khái niệm đa luồng

                 Đa luồng: chỉ tồn tại trong một ứng dụng, bao gồm các công việc của một ứng dụng đợc chạy đồng thời, chúng chia sẻ tài nguyên CPU và bộ nhớ mà hệ điều hành phân cho ứng dụng đó, chúng đợc điều khiển bởi một mô đun trong ứng dụng. Mỗi luồng có gán cho một không gian riêng trong phạm vi không gian cho ứng dụng và các luồng khác không chia sẻ các nguồn tài nguyên đó. Mô hình Apartment thì hiệu quả hơn mô hình single threading bởi vì công việc đợc phân chia giữa nhiều đối tợng trong khi mô hình free thì nhanh nhất và hữu hiệu nhất.

                Nhng chế độ free ẩn chứa nhiều rủi ro bởi vì sự chia sẻ tài nguyên giữa nhiều đối tợng, ngời lập trình cần phải chú ý nhiều đến sự.

                Đa luồng trong C#

                • Tổng quát các phơng thức của lớp Thread
                  • Đồng bộ hóa các luồng

                    Tuy nhiên đến bớc trên luồng vẫn cha thực hiện đợc và vẫn ở trạng thái Unstarted và khi ta gọi phơng thức Start của lớp Thread thì hệ điều hành sẽ thay đổi trạng thái của luồng tới trạng thái ThreadState.Running. Phơng thức này tung ra hai lỗi ngoại lệ là ThreadSateException khi mà lời gọi cố gắng gia nhập luồng trong khi đang ở trạng thai ThreadState.Unstarted và ngoại lệ thứ hai xảy ra là ThreadInterruptException tức là luồng bị ngắt trong khi đang chờ đợi. Khi một luồng mới tạo thành nó ở trạng thái unstarted, luồng duy trì ở trạng thái này cho đến khi phơng thức Thread.Start() đặt luồng vào trạng thái bắt đầu chạy Started và lập tức chuyển điều khiển đến luồng vừa gọi.

                    Một luồng khi đợc tạo ra khi chạy sẽ có cài đặt mặc định mức độ u tiên Normal và các luồng sẽ chạy trên cơ sở mức độ u tiên của chúng.Thuật toán định thời gian biểu cho luồng nhằm xác định trật tự của các luồng đa ra thực hiện biến đổi theo hệ điều hành.

                    Hình 10   Vòng đời của một luồng
                    Hình 10 Vòng đời của một luồng

                    XML và C#

                    • Lịch sử các ngôn ngữ đánh dấu
                      • Cấu trúc và cú pháp XML
                        • XML trong C#

                          Cũn định dạng theo kiểu mở tức là các file nhị phân đó đã đợc chuẩn hoá .Ví dụ nh khi trình soạn thảo đọc đợc các bit 1100001 thì nó sẽ diễn giải thành số ‘97’ và tập tin nhị phân đợc chuẩn hoá còn đợc gọi là tập tin văn bản hay là mang tính chất mở. Tất cả các đoạn code đều có chỗ xác định và mang ý nghĩa trong trang HTML ví dụ nh thẻ “đánh dấu” <B> và </B> cho biết phần nội dung nằm giữa hai thẻ này phải đợc in đậm, thẻ <BR> xác định một chỗ xuống dòng. Không giống nh ngôn ngữ HTML ( HTML đợc coi là một ứng dụng của SGML bởi vì HTML đợc tạo ra dựa trên chuẩn SGML và nó kế thừa nhiều chi tiết từ SGML), XML là tập con của SGML và XML cũng đợc coi là một ‘siêu ngôn ngữ’ (ngôn ngữ có thể tạo ra các ngôn ngữ khác).

                           Thực thể phân tách hay còn đợc gọi là thực thể văn bản ,chứa các dữ liệu văn bản ,trờ thành một phần của tài liệu XML .Khi một trình xử lí XML phân tách các thực thể này ,nội dung của chúng xuất hiện nh một phần của tài liệu tại nơi tham chiếu thực thể .Ví dụ nh ta có khai báo nh sau : <!ENTITY E “Hello”>. Không gian tên System.Xml.Serialization cung cấp cho chúng ta khả năng chuyển đổi từ t liệu XML sang các dạng cấu trúc dữ liệu khác trên cùng một miền (Deserializing) và chuyển từ tập các đối tợng có thể tạo ra một t liệu XML chuẩn (Serializing). Ta xét ví dụ trên, ta tạo một đối tợng từ lớp Car, với các thuộc tính public và ứng với mỗi thuộc tính của đối tợng nếu ta muốn sau quá trình chuyển hoá nó đợc chuyển thành thuộc tính của thành phần của XML thì ta thêm [XmlAttribute] vào trớc đoạn code đó.

                          Hình 14   Mã của văn bản Word đọc bằng NotePad
                          Hình 14 Mã của văn bản Word đọc bằng NotePad

                          Lập trình mạng trong C#

                          Giới thiệu về lập trình mạng

                            Trong .NET Framework chúng ta sử dụng một socket để kết nối hai mỏy, tiếp đến chóng ta sẽ có một NetworkStream cho phép thao tác socket giống như thao tác với các đối tượng vào ra bình thường khác. Chóng ta có được NetworkStream này từ lớp Socket thụng qua sử dụng một TcpListener giống như một server dựng để lắng nghe các yêu cầu kết nối và một TcpClient dùng giống như một client để khởi tạo kết nối. Ở các ví dụ trên chúng ta đã thấy được sự dể dàng trong việc tạo một socket kết nối cũng như việc thao tác trên các dòng tin StreamNetwork giống như chúng ta đang thao tác trên các dòng tin vào ra bình thường khác.

                            Phương thức ServerOneJabber.Run() là phương thức tạo một tiến trình đại diện và nó chứa đựng các nhận dạng đối với các JabberServer chỉ in ra màn hình console những gì gửi đến nó.

                            Giao tiếp với Web

                              NET Framework SDK được thiết kế có hổ trợ Microsoft’s Internet Information Server (IIS) và hầu hết các hình thức truy cập trực tiếp đều có hổ trợ giao diện IHttpHandler trong không gian tên System.Web. Thuộc tính quan trọng nhất trong HttpContext là các đối tượng HttpRequest và HttpResponse (chú ý rằng các lớp này khác với các lớp mà được dùng tại client HttpWebRequest và HttpWebResponse). Với “headless”, chúng ta hiểu rằng WebServices không có phần giao diện người dùng (tất nhiên giao diện người dùng cuối cùng thì cũng cần thiết, nhưng nó được thiết lập bởi một số thành phần khác chứ không phải WebServices.

                              Cũng giống như ADO.NET hay XML thì trang ASP.NET cũng là một công nghệ được tạo nên với C#, nhưng nó không phải là một tập con ASP.NET được biên dịch thành khối các mã lệnh HTML (giống WebServices đã khai báo ở trên).

                              Phô lôc

                              Mô tả chơng trình minh họa

                              Giới thiệu ngôn ngữ lập trình C# Phụ lục Giai đoạn tìm kiếm và hiển thị buộc phải tiến hành song song vì dữ liệu từ một Website rất lớn, khó tìm hết trong thời gian ngắn, ngời dùng lại muốn nhìn thấy kết quả. Chơng trình sử dụng 2 luồng, luồng 1 chịu trách nhiệm tìm kiếm, phân tích thông tin từ Website, đa địa chỉ trang Web cùng số lần thuật ngữ xuất hiện vào một hàng, luồng 2 chịu trách nhiệm vào hàng lấy địa chỉ trang Web cùng sô lần xuất hiện ra hiển thị. Chơng trình có sử dụng một giải thuật tìm kiếm nhanh để tìm kiếm thuật ngữ.

                              Quá trình duyệt link trong trang Web sử dụng quá trình duyệt theo chiều rộng.