Mục tiêu môn học§ Sau khi kết thúc môn học này, sinh viên có thể • Trình bày được đặc trưng cơ bản của công nghệ .NET • Trình bày được kỹ thuật lập trình hướng đối tượng sử dụng ngôn ngữ
Trang 2Mục tiêu môn học
§ Sau khi kết thúc môn học này, sinh viên có thể
• Trình bày được đặc trưng cơ bản của công nghệ NET
• Trình bày được kỹ thuật lập trình hướng đối
tượng sử dụng ngôn ngữ C#.NET
• Lập trình được một ứng dụng Windows Form sử dụng ngôn ngữ C#.NET, kết nối với cơ sở dữ liệu SQL Server, lập báo cáo sử dụng công cụ Crystal Report.
Trang 3§ Tài li ệu tham khảo chính:
• Programming C#, 4th Edition, Jesse Liberty
• Pro NET 2.0 Windows Forms and Custom
Controls in C#, Matthew MacDonald
• Professional C#, 2nd Edition, Wrox Press Ltd
(Bản dịch tiếng Việt)
• ftp://dce.hut.edu.vn/thuanpv/C_Sharp
Trang 4Nội dung môn học
Chương 1: Giới thiệu C# và NET Framework Chương 2: Giới thiệu môi trường phát triển
ứng dụng Visual Studio NET 2005
Chương 3: C# căn bản
Chương 4: Hướng đối tượng trong C#
Chương 5: Lập trình ứng dụng với C#
Trang 5Nội dung môn học
Chương 1: Giới thiệu C# và NET Framework Chương 2: Giới thiệu môi trường phát triển
ứng dụng Visual Studio NET 2005
Chương 3: C# căn bản
Chương 4: Hướng đối tượng trong C#
Chương 5: Lập trình ứng dụng với C#
Trang 6Nội dung môn học
Chương 1: Giới thiệu C# và NET Framework
Chương 2: Giới thiệu môi trường phát triển
ứng dụng Visual Studio NET 2005
Chương 3: C# căn bản
Chương 4: Hướng đối tượng trong C#
Chương 5: Lập trình ứng dụng với C#
Trang 7Nội dung chương 1
1.1 Nền tảng NET (.NET Flatform)
1.2 Kiến trúc NET (.NET Framework)
1.3 Biên dịch trong NET
1.4 Ngôn ngữ lập trình C#
Trang 81.1 Nền tảng NET (.NET Flatform)
.NET Platform là nền tảng phát triển:
- Cung cấp giao diện lập trình (API) cho các dịch
vụ (services) và các hàm API truyền thống của
hệ điều hành Windows
- Cung cấp một nền tảng phát triển chung cho
nhiều ngôn ngữ lập trình khác nhau của
Microsoft: C#, Visual J#, Visual Basic…
Trang 9Nền tảng NET (.NET Flatform)
.NET Platform bao gồm các nhóm sản phẩm
• Tập hợp các ngôn ngữ (C#, VB…), một tập hợp các công cụ phát triển bao gồm Visual Studio
.NET, thư viện để phát triển các ứng dụng web (web and web services), các ứng dụng Windows cũng như môi trường thực thi chung (Common
Language Runtime (CLR))
• Nền tảng NET 2.0 không chỉ hỗ trợ các ứng dụng trên máy tính cá nhân, máy chủ mà còn hỗ trợ
các thiết bị nhúng (Cell phones, game boxes…)
Trang 101.2 Kiến trúc NET (.NET Framework)
§ Microsoft NET hỗ trợ nhiều ngôn ngữ khác nhaunhờ hệ thống - Common Type System (CTS)
§ Quy định những yêu cầu tối thiểu để một ngôn
ngữ lập trình có thể tích hợp vào NET –
Common Language Specification (CLS)
§ Kiến trúc NET là tầng ngay trên hệ điều hành, bao gồm:
• 5 ngôn ngữ lập trình chính thức: C#, VB, VC++, Visual J# và Jscript.NET
• CLR (Common Language Runtime)
• Các thư viện lập trình
Trang 1111.NET Framework
Trang 121.3 Biên dịch trong NET
§ NET không biên dịch trực tiếp các chương trìnhthành file thực thi
§ NET biên dịch các chương trình thành các
assembly, chứa các mã chương trình trung giancủa Microsoft (Microsoft Intermediate Language -MSIL)
§ CLR sẽ dịch một lần nữa, sử dụng chương trìnhbiên dịch Just In Time (JIT) chuyển các mã MSIL sang mã máy và thực thi
Trang 1313Biên dịch trong NET
Trang 141.4 Ngôn ngữ lập trình C#
§ C# được phát triển bởi nhóm tác giả điều hànhbởi Anders Hejlsberg và Scott Wiltamuth, tác giảcủa Turbo Pascal và Borland Delphi
§ C# là ngôn ngữ lập trình hướng đối tượng
(Object Oriented Language)
• Hỗ trợ định nghĩa và làm việc với lớp (class)
• Hỗ trợ đầy đủ ba cơ chế đặc trưng của lập trình
hướng đối tượng: đóng gói (encapsulation), kế
thừa (inheritance) và đa hình (polymorphism)
Trang 15Nội dung môn học
Chương 1: Giới thiệu C# và NET Framework
Chương 2: Giới thiệu môi trường phát triển
ứng dụng Visual Studio NET 2005
Chương 3: C# căn bản
Chương 4: Hướng đối tượng trong C#
Chương 5: Lập trình ứng dụng với C#
Trang 16Nội dung chương 2
2.1 Môi trường phát triển ứng dụng NET
2.2 Chương trình Hello World
2.3 Môi trường phát triển ứng dụng Visual Studio NET
Trang 17§ Môi trường thực thi ứng dụng NET: Microsoft
.NET Framework
• http://www.microsoft.com/downloads/
§ Trình soạn thảo và biên dịch
- Visual Studio NET IDE
- Trình soạn thảo văn bản (Notepad, UltraEdit…) & Trình biên dịch bằng dòng lệnh (Command-line compiler)
Trang 182.2 Chương trình Hello World
1) Mở chương trình Visual Studio NET 2005
2) Tạo một dự án mới với kiểu ứng dụng console(HelloWorld)
Trang 20Chương trình Hello World
Kết quả khi chạy chương trình Hello World
Trang 21§ Namespaces (Không gian tên)
• Nhóm các tính năng có liên quan của C# vào một loại
• Cho phép dễ dàng tái sử dụng mã
• Trong thư viện NET framework có nhiều không gian tên
• Phải tham chiếu tới để sử dụng
Trang 22Một số khái niệm cơ bản trong C#
Trang 23Một số khái niệm cơ bản trong C#
§ Lớp (class): định nghĩa một kiểu dữ liệu, mô tả
một nhóm các đối tượng với các phương thức vàthuộc tính
• Phương thức (Method)
• Thuộc tính (Property)
Trang 24Chương trình Hello World
using System;
using System.Collections.Generic;
using System.Text;
namespace HelloWorld {
class Program {
static void Main(string[] args) {
Console.WriteLine("Hello World"); }
} }
Trang 25252.3 Visual Studio NET IDE 2005
Giao diện làm việc chính
Trang 26Gỡ lỗi sử dụng VS.NET 2005
Set breakpoint
-Nhấn F9 hoặc
-Click chuột trái
vào bên lề trái
của hàng cần đặt
breakpoint
Trang 27Gỡ lỗi sử dụng VS.NET 2005
Bắt đầu quá trình debug: nhấn F5 (Debug -> Start Debugging”
Trang 28Gỡ lỗi sử dụng VS.NET 2005
Xem giá trị của các biến, đối tượng
Xem giá trị các biến, đối tượng tại cửa sổ local
Trang 29Nội dung môn học
Chương 1: Giới thiệu C# và NET Framework Chương 2: Giới thiệu môi trường phát triển
ứng dụng Visual Studio NET 2005
Chương 3: C# căn bản
Chương 4: Hướng đối tượng trong C#
Chương 5: Lập trình ứng dụng với C#
Trang 30Nội dung chương 3
3.1 Kiểu dữ liệu (Types)
3.2 Biến và hằng số (Variables and Constants)
3.3 Các câu lệnh và cấu trúc điều khiển
(Statements)
3.4 Các toán tử (Operators)
Trang 313.1 Kiểu dữ liệu (Types)
§ C# là ngôn ngữ định kiểu mạnh:
• Phải định nghĩa kiểu dữ liệu của mỗi đối tượng
(Ví dụ: integers, floats, strings, buttons…)
• Trình biên dịch sẽ kiểm tra và đảm bảo ngăn
chặn các lỗi do các phép gán sai kiểu dữ liệu
§ Phân loại dữ liệu
§ Phân theo phương thức định nghĩa: build-in (có sẵn) và user-defined (người dùng tự định nghĩa)
§ Phân theo cách thức lưu trữ: value (tham trị) và
reference (tham chiếu)
Trang 32Kiểu dữ liệu (Types)
§ Kiểu tham trị (value type)
• Lưu trữ trong vùng nhớ ngăn xếp (stack)
§ Kiểu tham chiếu (reference type)
• Địa chỉ lưu trữ trong ngăn xếp (stack)
• Dữ liệu thực được lưu trữ trong vùng nhớ Heap
Cho phép lưu trữ đối tượng có kích thước lớn
Trang 33Kiểu dữ liệu có sẵn (build-in type)
§ C# hỗ trợ một số kiểu dữ liệu có sẵn, mỗi kiểu
dữ liệu này tương ứng với một kiểu dữ liệu hỗ
trợ bởi NET CLS (Common Language System)
§ C# có thể sử dụng đối tượng do các ngôn ngữ
khác trong bộ NET tạo ra và ngược lại (Ví dụ: VB.NET)
§ Mỗi kiểu dữ liệu có kích thước xác định
Trang 34Kiểu dữ liệu có sẵn (build-in type)
Trang 3535Kiểu dữ liệu có sẵn (build-in type)
Trang 36Escape Character
Trang 37Chuyển đổi kiểu dữ liệu
§ Có hai cách chuyển đổi kiểu dữ liệu có sẵn
đổi diễn ra tự động và đảm bảo không bị mất mát
dữ liệu
üVí dụ: short x=5;
int y=x;
toán tử chuyển đổi (cast operator)
üVí dụ: (char)65 -> chuyển đổi từ số sang ký tự
Trang 383.2 Biến và hằng số (Variables and Constants)
§ Biến (variable):
• Một vùng nhớ có định kiểu
• Có thể gán và thay đổi được giá trị
• Các biến phải được khởi gán trước khi sử dụng, nếu không, trình biên dịch sẽ báo lỗi
int myInt;
System.Console.WriteLine ("Uninitialized, myInt: {0}", myInt);
Trang 40Kiểu liệt kê
§ Kiểu liệt kê chứa một tập hợp các hằng số
(enumerator list) Lợi ích của enumerator
• Cho phép nhóm một tập hợp các hằng số có liên quan với nhau -> tránh phải khai báo nhiều hằng
số và tăng mối quan hệ logic giữa các hằng số
• Làm đơn giản hóa mã chương trình
enum GoodWeather : uint
{ temperature=28, moisture=80,
wind=5
Trang 41Chuỗi (string) và cách đặt tên trong C#
§ Chuỗi là một mảng các ký tự
§ Khai báo và khởi gán giá trị cho chuỗi
• string myString=“Test String”;
§ Trong C#, chúng ta nên đặt tên các biến, các
phương thức, các lớp…theo khuyến cáo của
Trang 423.3 Các câu lệnh (statements)
§ Một chương trình C# là một dãy các câu lệnh
(statements)
§ Mỗi câu lệnh kết thúc bởi dấu “;”
§ Các câu lệnh được xử lý tuần tự theo chiều từ
trên xuống dưới (trừ các câu lệnh điều khiển:
Trang 43Lệnh nhảy không điều kiện
§ Có hai trường hợp phát sinh lệnh nhảy không
điều kiện:
• Có lời gọi một phương thức: dừng phương thức hiện tại và chuyển sang (nhảy không điều kiện) thực hiện phương thức vừa triệu gọi, sau khi thực hiện xong, trở về phương thức trước đó.
• Sử dụng một trong số các lệnh nhảy không điều kiện: goto, break, continue, return hoặc throw
Trang 44Lệnh nhảy có điều kiện
§ Câu lệnh: if…else
§ Câu lệnh điều kiện lồng (Nested if)
§ Câu lệnh chọn: switch…case
Trang 45Câu lệnh điều kiện if…else
if (Bi ểu thức điều kiện)
Trang 46Câu lệnh điều kiện lồng (Nested if)
§ Có thể được sử dụng trong những câu lệnh điềukiện phức tạp, điều kiện lồng nhau
}
else
{ Console.WriteLine("La chu cai hoa");
Trang 47Lệnh nhảy (break, continue)
[default: Các câu lệnh cho trường hợp mặc định]}
Trang 48Câu lệnh chọn: switch…case
static void Main(string[] args)
{
const int Vietnam = 0;
const int Laos = 1;
const int Cambodia = 2;
const int Thailand = 3;
Trang 52Console.Write("\t{0}", i);
} else { Console.Write("\t{0}", i);
} } }
Trang 53Vòng lặp while
while ( expression ) statement
Biều thức kiểm tra Công việc cần thực thi
static void Main(string[ ] args)
Trang 54Vòng lặp do…while
do statement while expression
Biều thức kiểm tra
Công việc cần thực thi
static void Main(string[ ] args)
Trang 553.4 Toán tử (Operator)
§ Toán tử được phân thành nhiều liệu khác nhau
• Toán tử gán (assignment operator): =
• Toán tử toán học (arithmetic operators): +, -, * …
• Toán tử tăng, giảm (increment and decrement
operators): ++, , -=, *= …
• Toán tử quan hệ (relational operators): ==, != …
• Toán tử logic (logical operators): &&, || …
• Toán tử ba thành phần (Ternary Operator)
Trang 56Toán tử toán học
§ Các toán tử cơ bản: cộng (+), trừ (-), nhân (*),
chia (/)
§ Toán tử chia lấy phần dư (modulus): %
static void Main(string[] args)
{
int i1 = 17;
int i2 = 4;
Console.WriteLine("Integer:{0} \nFloat:{1} \nModulus:{2}",
i1 / i2, (float)i1 / i2, i1 % i2);
}
Trang 59Chú thích: dữ liệu kiểm tra, x=5 và y=7
Trang 60Toán tử ba thành phần
conditional-expression ? expression1 : expression2
§ Conditional-expression: bi ểu thức kiểm tra điều kiện
§ Expression1: biểu thức 1, thực hiện khi biểu thức kiểm tra trả về true
§ Expression2: biểu thức 2, thực hiện khi biểu thức kiểm tra trả về false
§ Ví d ụ:
int valueOne = 10;
int valueTwo = 20;
Trang 61Bài thực hành số 1
Trang 62Bài thực hành số 1
nhập tên của họ, sau đó in lại tên đó dưới dạng
một lời chào
tính bình phương của một số
Trang 63Bài thực hành số 1
nguyên dương và kiểm tra số đó là chẵn hay lẻ
chương của số bất kỳ (từ 1 đến 9)
Trang 64Bài thực hành số 1
vuông cân tạo thành từ các ký tự bất kỳ, có độ dàicạnh nhập từ bàn phím
Trang 65Nội dung môn học
Chương 1: Giới thiệu C# và NET Framework Chương 2: Giới thiệu môi trường phát triển
ứng dụng Visual Studio NET 2005
Chương 3: C# căn bản
Chương 4: Hướng đối tượng trong C#
Chương 5: Lập trình ứng dụng với C#
Trang 66Nội dung chương 4
4.1 Cơ bản về lập trình hướng đối tượng
4.2 Lớp và đối tượng (Class and Object)
4.3 Kỹ thuật kế thừa và đa hình (Inheritance and
Trang 67Con cá vàng 1 Con cá vàng 2 Con cá vàng 3
Object
Trang 69Kế thừa (Inheritance)
Trang 70Các quan hệ (relationships)
Các đối tượng không tồn tại một cách độc lập,
luôn tồn tại mối quan hệ giữa nó và các đối tượngkhác: tổng quát hóa (generalization) , cộng tác
Trang 71Tổng quát hóa (generalization)
§ Lớp cha (fish) tổng quát hóa các thuộc tính, phương thức chung của các lớp con (Goldfish vàShark)
§ Các lớp con cũng có những thuộc tính, phươngthức riêng
Trang 72Quan hệ cộng tác (Association)
§ Các lớp có liên kết (connected) hoặc liên quan
Cd player + Speaker
(Collaboration)
Shark eat fish
Trang 74Quan hệ cấu thành (Composition)
§ Là một dạng của quan hệ kết tập, tuy nhiên yêucầu chặt chẽ hơn
• Mỗi bộ phận (part) chỉ nằm trong một cái tổng thể (the whole) duy nhất
üVD: phòng ngủ nhà bạn phải nằm trong nhà bạn,
không thể nằm trong nhà hàng xóm hay bất cứ ngôi nhà nào khác
Trang 75Quan hệ cấu thành (Composition)
§ Khi phá hủy cái tổng thể thì đồng thời cái bộ
phận cũng bị phá hủy
Phá nhà
Phá phòng ngủ
Trang 76üMột giáo viên có thể dạy nhiều lớp
• Quan hệ nhiều – nhiều
üMột giáo viên dạy nhiều sinh viên üMột sinh viên học nhiều giáo viên
Trang 784.2 Lớp và đối tượng
§Định nghĩa lớp (class)
[attributes] [access-modifiers] class identifier [:base-class [,interface(s )]]
{class-body}
Access-modifiers : quyết định phạm vi truy cập tới
các thuộc tính và phương thức của lớp
Identifier : tên lớp
Base-class : lớp cơ sở (lớp cha)
Class-body : định nghĩa các thuộc tính và phương
thức của lớp
Trang 79Access-modifiers
Có thể được truy xuất bởi các phương thức của lớp đó, lớp dẫn xuất từ lớp đó và các lớp trong cùng Assembly với nó
public
Giới hạn truy nhập Access-modifier
Trang 80Phương thức của lớp
Trang 81Khai báo và sử dụng đối tượng của lớp
public class Tester
Trang 82Tạo đối tượng (create object)
§ Sử dụng từ khóa “new”
Ví dụ:
Time t=new Time( );
§ Đối tượng là biến kiểu tham chiếu, không phải
tham trị
• Biến t không chứa giá trị của đối tượng
• Biến t chứa địa chỉ của đối tượng được tạo trong
bộ nhớ Heap
Trang 83Hàm tạo (constructor)
§ Khởi tạo một đối tượng -> gọi hàm tạo
(constructor)
• Hàm tạo mặc định: sẽ được CLR cung cấp nếu
người lập trình không định nghĩa
• Hàm tạo do người lập trình định nghĩa
§ Hàm tạo có chức năng:
• Tạo một đối tượng của lớp và chuyển nó sang
trạng thái xác định ( valid state )
• Hàm tạo thường được dùng để khởi gán các
thuộc tính của đối tượng
Trang 84Hàm tạo mặc định (default constructor)
§ Hàm tạo mặc định tạo đối tượng của lớp, ngoài ra
không làm gì khác
§ Các thuộc tính được khởi gán các giá trị mặc định
null reference
0 enum
‘\0’ (null) char
false bool
0 numeric (int, long, …)
Giá trị mặc định Kiểu dữ liệu
Trang 85Xây dựng hàm tạo
§ Hàm tạo có tên hàm trùng tên đối tượng, không
có kiểu dữ liệu trả về và phạm vi truy nhập
Trang 86} }
Trang 87Kiểm tra hàm tạo
public class Tester
{
static void Main()
{
System.DateTime currentDate = System.DateTime.Now;
Time t = new Time(currentDate);
t.DisplayCurrentTime();
}
}
Trang 88Hàm tạo sao chép (copy constructor)
§ Để hỗ trợ chức năng hàm tạo sao chép.NET định nghĩa một interface ICloneable
§ Class hỗ trợ hàm tạo sao chép phải
• implement interface ICloneable
public Object Clone() {
return MemberwiseClone(); // shallow copy }
• Tự xây dựng hàm tạo sao chép (hand-copying copy
constructor)
Trang 90Gọi hàm tạo sao chép
public class Tester
{
static void Main()
{
System.DateTime currentDate = System.DateTime.Now;
Time t = new Time(currentDate);
Trang 91Từ khóa this
§ Từ khóa this trỏ đến thể hiện hiện tại (current
instance) của đối tượng
§ Từ khóa this rất hữu ích trong một số trường
hợp
1) Chỉ rõ thành phần (thuộc tính) của đối tượng,
tránh nhầm lẫn với tên biến, tránh sự nhập nhằng
Trang 92Từ khóa this (tiếp)
2)Dùng làm tham số truyền vào cho một phươngthức của đối tượng khác, cho phép phương thức
đó có thể tác động đến các thành phần của đốitượng hiện tại
Trang 93Từ khóa this (tiếp)
3) Sử dụng cùng với indexer (Tìm hiểu sau)
4) Gọi một hàm tạo từ hàm tạo khác của lớp
Trang 94Từ khóa this (tiếp)
5) Gọi tường minh các phương thức, thuộc tính
this.z = 5; // assign to a member variable
this.Draw( ); // invoke member method