Bù lại nó hổ trợ khái niệm interface có những đặc điểm của đa kế thừ nhưng loại bỏ được những phức tạp ở đa kế thừa ở C++ o Ở ví dụ trên tính kế thừa được thể hiện ở việclớp HinhVuong là
Trang 1Khoa CNTT Trường CĐ Công Nghiệp Tuy Hòa
TÌM HIỂU NGÔN NGỮ LẬP TRÌNH CSHAP(C#)
Bắt Đầu
Nhóm PNP
Trang 2Nghiên cứu được chia làm hai giai đoạn:
1 Giai đoạn một nghiên cứu những khái niệm cơ bản của CShap và lập trình hướng đối tượng trong CShap
2 Giai đoạn hai nghiên cứu sâu kỹ thuật lập trình mạng được cài đặt trên ngôn ngữ Cshap
Trang 3CÁC VẤN ĐỀ
C# và kiến trúc NET Một số công cụ hổ trợ lập trình C# Hướng đối tượng trong C#
Trang 4C# VÀ KIẾN TRÚC NET
1 C# là một trình biên dịch hướng NET, nghĩa là tất cả các mã của C#
luôn luôn chạy trên trên môi trường NET Framework Điều đó dẫn đến 2 hệ quả sau:
– Cấu trúc và các lập luận C# được phản ánh các phương pháp luận
của NET ngầm bên dưới
– Trong nhiều trường hợp, các đặc trưng của C# thậm chí được quyết
định dựa vào các đặc trưng của NET, hoặc thư viện lớp cơ sở của NET
2 C# là một ngôn ngữ độc lập Nó được thiết kế để có thể sinh ra mã
đích trong môi trường NET, nó không phải là một phần của NET bởi vậy có một vài đặc trưng được hỗ trợ bởi NET nhưng C# không
hỗ trợ và bạn cũng đừng ngạc nhiên khi có những đặc trưng C# hỗ trợ mà NET không hỗ trợ
– chẳng hạn như quá tải toán tử
Trang 5C# VÀ CÔNG CỤ HỔ TRỢ LẬP TRÌNH
Bạn có thể lập trình Cshap bằng bất cứ trình soạn thảo văn bản nào
Ví dụ như notepad, Wordpad nhưng để làm tăng năng xuất của làm việc của các lập trình viên rút ngắn thời gian viết code
Ta nên sử dụng các IDE hỗ trợ lập trình
Ví dụ như :
Bộ IDE: Microsoft Visual Studio các phiên bản 2003,
2005, 2008 và gần đây nhất là bản 2010 Bên cạnh đó microsoft còn có các bản miễn phí Express dành cho Các cá nhân nghiên cứu hay học tập
Trang 6HƯỚNG ĐỐI TƯỢNG TRONG C#
o C# dựa trên nền tảng là C++ nên các cú pháp về khai báo biến cấu trúc lặp ….Gần như tương tự C++ vì vậy chúng ta lướt qua các khái niệm trên Ta chỉ nghiên cứu các khái niệm cơ bản của lập trình hướng đối tượng
o Giống như java C# cũng là ngôn ngữ lập trình hướng đối tượng
Trang 8Tính kế thừa
o Khác với C++, C# chỉ hỗ trợ đơn kế thừa Nghĩa là một lớp con chỉ được thừa kế từ một lớp cha duy nhất Bù lại nó hổ trợ khái niệm interface có những đặc điểm của đa kế thừ nhưng loại bỏ được những phức tạp ở đa kế thừa ở C++
o Ở ví dụ trên tính kế thừa được thể hiện ở việclớp HinhVuong
là lớp con kế thừa từ lơp cha là lớp HinhHoc cụ thể là kế thừa
từ một lớp trựu tượng Lớp cha
Trang 9Tính kế thừa(tt)
Trong C# một lớp bắt buột phải thừa kế từ một lớp nào đó ngoại
trừ lớp Object C# hỗ trợ một lớp cơ sở toàn diện gọi là
System.Object
Vì lớp cha HinhHoc là một lớp trừu tượng(abstract) chứa trong
nó hai phương thức trừu tượng , C# sẽ yêu cầu lớp con
HinhVuong phải override lại các phương thức đó
Phương thức abstract ở lớp cha
Phương thức cài đặt ở lớp con
Trang 10Phương thức nạp chồng(Overloading)
o C# hỗ trợ phương thứ nạp chồng với một vài dạng phương thức khác nhau về những đặc tính sau:số lượng tham số, kiểu tham số
o Nó không chấp nhận hai phương thức chỉ khác nhau về kiểu trả về, hay khác nhau về đặt tính của tham số đang được khai báo như sef hay out
o Ở ví dụ ta thấy hàm tạo ở lớp HinhVuong được viết theo kiểu nạp chồng
Hàm tạo(Constructor) được viết theo 2 kiểu
Trang 11Giao diện(interface)
o Việc khai báo giao diện làm việc cũng tương tự như khai báo một lớp trừu tượng( abstactor) nhưng nó không cho phép thực thi bất cứ một phần nào của giao diện Một giao diện chỉ được khai báo bên trong
nó những phương thức, thuộc tính, bộ lập mục và sự kiện
o Giao diện thì không chứa Constructor , không cho phép các phương thức nạp chồng, không cho phép khai báo các bổ, hay các từ khóa virtual hay static trên các thành phần Mặc các thành phần trong giao diện luôn luôn là public
Giao diên IDoHoa được khai báo và cài đặt cho lớp HinhChuNhat
Trang 12Struct
o Trong C# struct được định nghĩa gần giống như một lớp chỉ khác tù khóa và một vài điểm như sau:
1 Struct là một kiểu giá trị không phải kiểu tham chiếu
2 Struct không hỗ trợ kế thừa nhưng vẫn kế thừa từ lớp Object
3 Trình biên dịch luôn cung cấp một constructor không tham số mặc định và không cho phép thay thế
4 Với struct bạn có thế chỉ rỏ cách mà các trường đặt ngoài bộ nhớ
Khai báo 1 struct
Vì struct là kiểu giá trị nên thao tác new chỉ đơn giản là định vị bộ nhớ
và gọi hàm tạo nên có thể code trên struct theo hai cách như sau:
Trang 13Lỗi và xử lý biệt lệ
o Nếu bạn đã học VB thì cũng biết cách xử lý biệt lệ của nó rất hạn chế trong câu lệnh On Error Goto đối với C# nó mở ra một thế giới mới cho việc xử lý lỗi trong chương trình của bạn
o Cách của C# xử lý biệt lệ tương đối giống với Java và C++ nhưng trong C++ thỉnh thoảng phải cảnh giác với những biệt lệ bởi việc thực thi ẩn trong C++ có thể xảy ra Nhưng bạn hãy hoàn toàn yên tâm khi sử dụng trong C# vì nó không gây bất cứ ảnh hưởng nào bất lợi nào trong thực thi
o Sau đây là những lớp biệt lệ của lớp cơ sở:
Trang 15Các lớp biệt lệ cơ bản(tt)
o những lớp biệt lệ nên đươc đặt trong bất kì namspace nào tương đuơng những lớp mà chúng có thể được sinh ra - vì lí do đó những biệt lệ có liên quan đến IO thì nằm trong namspace System.IO
o Có 2 lớp quan trọng trong hệ thống các lớp được dẫn xuất từ System.Exception là :
System.SystemException - sử dụng cho những biệt lệ thường xuyên được sinh ra trong thời gian chạy của NET,hoặc là những lỗi chung thường được sinh ra bởi hầu hết những ứng dụng , ví dụ như là StackOverflowException đuợc sinh ra bởi thời gian chạy NET nếu nó thăm dò thấy Stack đầy
Trang 16Đón bắt biệt lệ
cách mà nó làm như sau :
1 Dòng thực thi bước vào khối try
2 Nếu không có lỗi xuất hiện, việc thực thi tiến hành một cách bình thường xuyên suốt khối try, và khi đến cuối khối try, dòng thực thi sẽ nhảy đến khối finally ( bước 5), tuy nhiên, nếu một lỗi xuất hiện trong khối try,thực thi sẽ nhảy đến khối catch ( bước tiếp theo)
3 trạng thái lỗi được xử lí trong khối catch
4 vào cuối của khối catch , việc thực thi được chuyển một cách tự động đến khối finally
5 khối finally được thực thi
Cú pháp C# được sử dụng để thể hiện tất cả điều này cụ thể như sau:
Trang 17Đón bắt biệt lệ(tt)
Những thuộctính của system.exception
Trong ví dụ trên chúng ta chỉ xem xét 1 thuộc tính đó là message, của đối tượng exception tuy nhiên có 1 số những thuộc tính trong lớp
system.exception
- helplink: 1 liên kết đến 1 tập tin trợ giúp mà cung cấp nhiều thông tin hơn về biệt lệ
- message: chuỗi mô tả trạng thái lỗi
- source : tên của ứng dụng hoặc đối tượng mà gây ra lỗi
- Stacktrace: chi tiết về phương thức gọi stack ( để giúp đỡ truy dấu vết phương thức mà ném ra biệt lệ)
- TargetSite: một đối tượng phản ánh của NET mà mô tả phương thức ném ra biệt lệ
- InnerException :nếu biệt lệ này được ném từ bên trong một khối catch , nó chứa đựng đối tượng biệt lệ mà gửi đoạn mã vào trong khối catch
Trang 18Cơ chế Delegate & Event
Có instance
Có thể chứa những tham chiếu đến 1 hay nhiều method Một delegate định nghĩa một signature
Return type Sequence of parameter types Tất cả các method có cùng signature có thể được add vào thể hiện của delegate
Trang 19Delegate instance có một danh sách các tham chiếu method
Cho phép add (+) các method
Có thể remove (-) các method
public delegate void MyDelegate1(int x, int y)
Delegate cho dạng hàm: void Method( int, int )
public delegate string MyDelegate2(float f)
Delegate cho dạng hàm: string Method( float )
Trang 202.) Instance delegate
public void Method1(int x, int y) {
… }
… MyDelegate1 del1 = new MyDelegate1(Method1);
public string Method2(float f) {
… }
… MyDelegate2 del2 = new MyDelegate2(Method2);
Cơ chế Delegate & Event(tt)
Trang 213.) Call Delegate
int x = 5, y = 10;
del1(x, y); del1(10, 20);
int y = 2; del1(100, y); Gọi del1
float f =0.5f;
string s;
s = del2(f);
string s = del2(100f); Gọi del2
Cơ chế Delegate & Event(tt)
Trang 223.) Multi Cast
void Print(int x,int y) {
Console.WriteLine(“x = {0}, y = {1}”, x, y);
} void Sum(int x, int y) {
Console.WriteLine(“Tong = {0}”, x+y);
}
MyDelegate1 mulDel = new MyDelegate1(Print);
mulDel += new MyDelegate1(Sum);
Trang 23Cơ chế thông điệp giữa các lớp hay các đối tượng
Có thể thông báo cho lớp khác biết được khi một lớp có phát sinh điều gì đó
Publisher: lớp phát sinh sự kiện Subscriber: lớp nhận hay xử lý khi sự kiện xảy ra Trong môi trường giao diện GUIs (Graphical User Interfaces: GUIs):
Button đưa ra sự kiện “Click”, cho phép lớp khác có thể đáp ứng (xử lý) khi sự kiện này xảy ra
VD: Button “Add” trong Form, khi sự kiện click xảy ra thì Form thực hiện lấy dữ liệu từ các TextBox đưa vào ListBox…
Cơ chế Delegate & Event(tt)
Trang 24Một lớp có publish một tập các event cho phép các lớp khác subscribe
Button là lớp publish đưa ra event: click Form là lớp subscribe có phần xử lý riêng khi “click” của Button kích hoạt
Cơ chế Delegate & Event(tt)
Trang 25Sự kiện trong C# được thực thi nhờ uỷ thác
Lớp publishing định nghĩa ủy thác Những lớp subscribing phải thực thi Khi sự kiện xuất hiện thì phương thức của lớp subscribing được gọi thông qua uỷ thác
Phương thức để xử lý sự kiện gọi là trình xử lý sự kiện (event handler)
Trình xử lý sự kiện trong NET Framework được mô tả như sau:
Trả về giá trị void Tham số 1: nguồn phát sinh sự kiện, đây chính là đối tượng publisher
Tham số 2: là đối tượng thuộc lớp dẫn xuất từ EventArgs Phải thực hiện trình xử lý sự kiện theo đúng mẫu trên!
Cơ chế Delegate & Event(tt)
Trang 26Khai báo delegate xử lý sự kiện
Khai báo event
Các lớp muốn xử lý khi sự kiện OnEventName phát sinh thì phải thực thi event handler
Cơ chế Delegate & Event(tt)
GIỚI THIỆU public delegate void HandlerName(object obj, EventArgs arg);
Trang 27Tính đa luồng
Định nghĩa luồng: Luồng (thread) là một chuỗi liên tiếp những
sự thực thi trong chương trình Trong chương trình C#, việc thực thi bắt đầu bằng phương thức main() và tiếp tục cho đến khi kết thúc hàm main()
Thao tác luồng: luồng được thao tác bằng cách dùng lớp Thread nằm trong namespace System.Threading, một thể hiện của luồng đại diện cho một luồng Chúng ta có thể tạo các bằng cách khởi tạo một đối tượng luồng
Trang 28Tính đa luồng(tt)
Độ ưu tiên luồng:
Độ ưu tiên của luồng được định nghĩa là các giá trị trong bản liệt kê
ThreadPriority, các giá trị: Highest, abovenormal, Normal, Belownormal, Lowest Mỗi luồng có một độ ưu tiên cơ sở
Sự đồng bộ: Một khía cạnh chủ yếu khác của sự đồng bộ hay là việc truy nhập một biến chỉ bởi nhiều luồng vào cùng thời điểm, nếu không đảm bảo được sự đồng bộ thì sẽ gây ra các lỗi ting vi
Để giải quyết việc đồng bộ, C# cung cấp cách thức truy nhập biến bằng từ khóa lock:
Lock (x) {
doSomething();
} Các vấn đề về đồng bộ:
Deadlock: là một lỗi có thể xuất hiện khi hai luồng cần truy nhập vào các tài nguyên mà bị khóa lẫn nhau
Race condition: là một lỗi xuất hiện khi vài luồng cố gắng truy nhập vào cùng một dữ liệu và không quan tâm đến các luồng khác
Trang 29Tính đa luồng (tt)
Ví dụ về tính đa luồng:
static void DisplayNumbers() {
Thread thisThread = Thread.CurrentThread;
string name = thisThread.Name;
Console.WriteLine("Starting thread: " + name);
Console.WriteLine(name + ": Current Culture = " + thisThread.CurrentCulture);
for (int i=1 ; i<= 8*interval ; i++) {
if (i%interval == 0) Console.WriteLine(name + ": count has reached " + i); }
Trang 32Những bổ từ truy cập(access modifiers):
o C# cung cấp một số bổ từ truy cập để cho biết sự tồn tại của một thành viên trong một lớp C# có hổ trợ 5 bổ từ như sau:
Trang 33Giới thiệu hai lớp XmlReader và XmlWriter :Cả hai lớp XmlReader
và XmlWriter đều là những lớp trừu tượng Hình vẻ dưới đây chỉ ra các lớp được thừa kế từ XmlReader và XmlWriter
Trang 34ở nút button như sau:
o Sử dụng lớp XmlTextWriter: việc sử dụng system.xml cho phép chương trình của chúng ta xuất ra một file XML với nội dung mong muốn Ta xét ví dụ sau:
Trang 36Sử dụng XPath trong NET
XPath là một ngôn ngữ truy vấn cho XML Bạn sẽ dùng XPath để chọn một bộ con các các yếu tố giá trị văn bản hoặc các giá trị thuộc tính
Không gian tên System.XPath
Đây là một bảng liệt kê các lớp trong System.XPath, và một giải thích ngắn vì hỗ trợ của mỗi lớp:
bị một bộ nút trong Xpath
SelectNodes, SelectSingleNodes, Evaluate, và Matches
Trang 39Tổng kết
Về cơ bản tìm hiểu được ngôn ngữ lập trình c#, NET Framework, lập trình hướng đối tượng qua đó nâng cao kiến thức của sinh viên Thêm kinh nghiệm tự nghiêm cứu tìm tòi ngôn ngữ lập trình mới
Làm nền cho việc tìm hiểu kỹ thuật lập trình mạng
Vì thời gian có hạn cùng những lý do khác nên không tránh được những sai sót trong slide mong thầy và các bạn thông cảm, góp ý cho nhóm
Khó khăn Chưa đạt được
Trang 40Tài liệu tham khảo
1 Professional C#, 2nd Edition, Xuất bản bởi Wrox Press Ltd
2 Các giải pháp lập trình c# tổng hợp và biên dịch nguyễn ngọc bình phương-Thái Thanh Phong
3 Các trang diễn đàn trên internet CÁC VẤN ĐỀ