Lập trình trên Desktop
Trang 31 Tổng quan về NET Framework
oGiới thiệu NET Platform oGiới thiệu NET Framework
oCác thành phần của NET Framework oCác loại ngôn ngữ lập trình trên NET oCác loại ứng dụng có thể viết với NET oCác bước phát triển ứng dụng
Trang 41.1 Giới thiệu NET Platform
o.NET Platform
ứng dụng Internet
oMục đích của NET Platform
◦ Đơn giản hóa việc phát triển các ứng dụng trong môi trường phân bố của
Internet
Trang 51.1 Giới thiệu NET Platform
oCác thành phần của NET Platform
◦ .NET Enterprise Servers ◦ Visual Studio NET
Trang 61.1 Giới thiệu NET Platform
oMicrosoft NET Framework là môi trường chung cho việc xây dựng,
triển khai và chạy các ứng dụng
◦ Nhiều tiện ích khác giúp cho việc phát triển các ứng dụng nhanh, hiệu quả
hơn.
Trang 71.1 Giới thiệu NET Platform
tin qua Internet Dùng các NET My Service các ứng dụng có thể truyền thông trực tiếp bằng giao thức SOAP và XML
Trang 81.1 Giới thiệu NET Platform
o.NET Enterprise Servers, một nhóm các sản phẩm của Microsoft
Mỗi sản phẩm phụ trách một thành phần then chốt cho kiến trúc ứng dụng đang phát triển
oMột số sản phẩm:
◦ Microsoft Biztalk Server
◦ Microsoft Host integration Server ◦ …
Trang 91.1 Giới thiệu NET Platform
oVisual Studio NET, là môi trường phát triển để xây dựng các ứng
dụng trên NET Framework
Trang 101.2 Giới thiệu NET Framework
oCác mục đích thiết kế NET Framework ◦ Mô hình lập trình thống nhất
◦ Độc lập ngôn ngữ (hỗ trợ nhiều ngôn ngữ lập trình)
Trang 111.2 Giới thiệu NET Framework
oCác phiên bản NET Framework
2003; NET Framework 2.0 – Visual Studio 2005 ; NET Framework 3.0 – Visual Studio 2005; NET Framework 3.5 – Visual Studio 2008
◦ …
o.NET Framework có các thành phần chính:
◦ Framework class Library (FCL)
Trang 121.2 Giới thiệu NET Framework
Trang 131.3 Các thành phần của NET Framework
oCLR làm nhiệm vụ quản lý sự thực thi mã lệnh và tất cả các tác vụ
liên quan đến nó: biên dịch, quản lý bộ nhớ, bảo mật, quản lý tuyến
đoạn, và thực thi an toàn kiểu
oFCL là thư viện kiểu dữ liệu có thể tái sử dụng (gồm các class,
structure, …) dành cho các ứng dụng thực thi trong NET Tất cả các ngôn ngữ hỗ trợ NET Framework đều sử dụng thư viện lớp dùng chung này
Trang 141.3 Các thành phần của NET Framework
oCommon Language Runtime (CLR)
◦ CLR là môi trường thực thi cho ngôn ngữ chung và các dịch vụ trong quá trình
Trang 151.3 Các thành phần của NET Framework
oBiên dịch và thực thi
Trang 161.3 Các thành phần của NET Framework
oBiên dịch và thực thi:
là assembly Khối này sẽ chứa các mã lệnh ngôn ngữ trung gian và các
metadata mô tả thông tin cần thiết cho sự hoạt động của khối.
◦ Mỗi khi có yêu cầu thực thi assembly nói trên, CLR sẽ chuyển đối mã lệnh
ngôn ngữ trung gian trong assembly thành mã lệnh tương thích với CPU cụ thể trước khi có thể thực thi.
Trang 171.3 Các thành phần của NET Framework
oCác loại code trong NET ◦ Source code
◦ MSIL là tập các lệnh, mã lệnh cấp thấp do Microsoft sáng tạo ra.
◦ Các source code được viết bằng nhiều loại ngôn ngữ khác nhau đều phải dịch sang MSIL
◦ OptIL: là tập con của MSIL có thể được sinh bằng trình biên dịch tối ưu OptIL
giúp cho việc sinh nhanh native code
Trang 181.3 Các thành phần của NET Framework
Trang 19◦ Một assembly được tạo ra khi trình biên dịch tương thích với NET chuyển
một file chứa mã nguồn thành một file Library assemblies (DLL) hoặc Process
assemblies (EXE)
trình biên dịch cụ thể
lệnh hoặc tài nguyên (như ảnh hoặc dữ liệu XML)
Trang 201.3 Các thành phần của NET Framework
oCác thành phần trong assembly
Trang 211.3 Các thành phần của NET Framework
oMột assemply chứa nhiều file
Trang 221.3 Các thành phần của NET Framework
oManifest:
◦ Là một tập hợp các bảng chứa các metadata trong đó liệt kê tên của tất cả các
file trong assembly, tham chiếu đến các assembly bên ngoài, và các thông tin như tên, phiên bản để định danh assembly đó
◦ Khi một assembly được nạp, nhiệm vụ đầu tiên của CLR là mở file chứa
manifest để có thể định danh các thành viên có trong assembly
Trang 231.3 Các thành phần của NET Framework
◦ Metadata là thông tin nhị phân dùng để mô tả IL code
đến nó để khám phá các thông tin về code của chương trình như: các class, các thành viên, thừa kế,
◦ …
Trang 241.3 Các thành phần của NET Framework
Trang 25oJIT Compiler
◦ Trình biên dịch JIT là trình biên dịch lúc thực thi với nhiệm vụ chuyển đổi MSIL
(assemblies) sang native code
◦ Đặc điểm cơ bản của JIT
◦ JIP độc lập ngôn ngữ lập trình; JIT phụ thuộc kiến trúc CPU; JIP biên dịch cho mỗi phương
thức lần đầu tiên chạy; Native code được lưu lại để dùng lại sau này
◦ CLR cung cấp 3 trình biên dịch JIT để chuyển MSIL sang native code:
◦ EconoJIT; JIT; optJIT
Trang 261.3 Các thành phần của NET Framework
oFramework Class Library – FCL: Một tập thư viện lớp trong NET
o.Net Framework thay thế phần lớn (mặc dù không phải tất cả) các
tập Windows API bằng thư viện lớp hướng đối tượng và được quản lý tốt
Trang 271.3 Các thành phần của NET Framework
Trang 28oCác lớp trong FCL có thể được chia thành các loại sau:
console, network và file I/O; và tương tác dễ dàng với các runtime.
◦ Hỗ trợ tương tác cơ sở dữ liệu; dùng và sinh dữ liệu XML; và cấu trúc dữ liệu. ◦ Hỗ trợ xây dựng các ứng dụng web (thin client).
◦ Hỗ trợ xây dựng các ứng dụng desktop (thick client)
Trang 291.3 Các thành phần của NET Framework
Trang 331.4 Các loại ngôn ngữ trên NET
oC# (C-Sharp) – được thiết kế cho NET: Ngôn ngữ hướng thành
phần mới (component-oriented)
oC++ NET: Các mở rộng code được quản lý cho C++
oVisual Basic NET: Version mới của Visual Basic, có nhiều đổi mới oJScript NET: Version mới của Jscript, tăng cường sự thực thi
oJ# NET: Ngôn ngữ Java cho NET
oNgôn ngữ hãng thứ ba (Third-party): APL, COBOL, Pascal, Eiffel,
Haskell, ML, Oberon, Perl, Python, Scheme, Smalltalk
Trang 341.5 Các loại ứng dụng trên NET
◦ Windows control library ◦ Web control library
Trang 35oKhi chương trình được chạy trong CLR, JIT sẽ dịch các mã trung gian
sang native code và thực thi
oNative code được thực thi trong ngữ cảnh của CLR
Trang 372.1 Chương trình đầu tiên
oTạo chương trình ConsoleApp oSolution Explorer
oCửa sổ Properties oCửa sổ Error List
Trang 382.2 Biến
oCú pháp: <type> <name>; oTrong đó:
◦ <type>: kiểu dữ liệu
◦ <name>: tên biến
Trang 392.2 Biến
oĐặt tên biến:
◦ Có thể bắt đầu bằng ký tự, dấu gạch dưới.
◦ Không có ký tự trống, dấu gạch giữa, không trùng từ khóa oVí dụ, đặt tên biến đúng:
myName, x1, _test
oVí dụ, đặt tên biến sai: 1x, namespace, x-1, x 1
Trang 402.3 Giá trị Literal
oHằng (Constant) liên quan đến các giá trị cố định không thay đổi khi
thực thi Các giá trị cố định được gọi là Literal
oConstant là một kiểu dữ liệu thay thế cho Literal, còn Literral là thể
hiện chính nó.
oVí dụ, const PI = 3.14;
oHằng ở đây là PI, còn Literal là 3.14
Trang 412.3 Giá trị Literal
oTrong C#, được phân ra thành giá trị hằng số nguyên, hằng số thực,
hằng ký tự, hằng chuỗi ký tự và Boolean literal (hằng lôgic)
oVí dụ,
const x=5;
const st=“Khoa CNTT”;
Trang 422.3 Giá trị Literal
oMột số ký tự khi có ký tự \ đứng trước thì có ý nghĩa đặc biệt, gọi là
escape sequence (dãy thoát)
Trang 442.4 Kiểu dữ liệu
oKiểu dữ liệu cơ bản của giá trị được kế thừa từ
lớp System.ValueType, khi khai báo một biến kiểu int, hệ thống cấp phát bộ nhớ để lưu giá trị đó
oĐể lấy kích thước của một kiểu hoặc biến, sử dụng phương thức sizeof
◦Ví dụ, lấy kích thước của kiểu int viết: sizeof(int)
Trang 452.4 Kiểu dữ liệu
oKiểu số nguyên
Tên
sbyte System.SByte Integer between -128 and 127byte System.Byte Integer between 0 and 255
short System.Int16 Integer between -32768 and 32767ushort System.UInt16 Integer between 0 and 65535
Trang 462.4 Kiểu dữ liệu
oKiểu số nguyên
Tên
int System.Int32 Integer between -2147483648 and 2147483647 uint System.UInt32 Integer between 0 and 4294967295long System.Int64 Integer between -9223372036854775808 and
9223372036854775807ulong System.UInt64 Integer between 0 and 18446744073709551615
Trang 482.4 Kiểu dữ liệu
oKiểu văn bản và lôgic
char System.Char Một ký tự
bool System.Boolean true hoặc falsestring System.String Chuỗi các ký tự
Trang 492.4 Kiểu dữ liệu
oÉp kiểu, có 2 loại:
dữ liệu lớn hơn không làm mất thông tin
byte short int long float double
dữ liệu nhỏ hơn có thể làm mất thông tin
double float long int short byte
Trang 512.4 Kiểu dữ liệu
oMột số phương thức chuyển đổi kiểu có sẵn:
ToBooleanChuyển đổi một kiểu thành một giá trị Boolean, nếu có thểToByteChuyển đổi một kiểu thành một byte
ToCharChuyển đổi một kiểu thành một Unicode character, nếu có thểToDateTimeChuyển đổi một kiểu (kiểu integer hoặc string) thành các cấu
Trang 522.4 Kiểu dữ liệu
ToInt16Chuyển đổi một kiểu thành một 16-bit integerToInt32Chuyển đổi một kiểu thành một 32-bit integerToInt64Chuyển đổi một kiểu thành một 64-bit integerToSbyteChuyển đổi một kiểu thành một kiểu signed byte
ToSingleChuyển đổi một kiểu thành một số small floating pointToStringChuyển đổi một kiểu thành một string
ToByteChuyển đổi một kiểu thành một kiểu đã xác địnhToUInt16Chuyển đổi một kiểu thành một kiểu unsigned intToUInt32Chuyển đổi một kiểu thành một kiểu unsigned longToUInt64Chuyển đổi một kiểu thành một unsigned big integer
Trang 54Giảm giá trị toán hạng một đơn
Trang 55!=Kiểm tra giá trị khác nhau
>Kiểm tra giá trị lớn hơn(A > B) false<Kiểm tra giá trị nhỏ hơn(A < B) true>= Kiểm tra giá trị lớn hơn hoặc
<= Kiểm tra giá trị nhỏ hơn hoặc
Trang 562.5 Toán tử
oToán tử logic Ví dụ, biến A=1, B=0
Toán
&& Toán tử logic AND (và) Nếu cả hai toán tử đều có
giá trị khác 0 thì điều kiện trở lên true. (A && B) false||Được gọi là toán tử logic OR (hoặc) Nếu một trong
hai toán tử khác 0, thì điều kiện là true. (A || B) true !Được gọi là toán tử NOT (phủ định) Sử dụng để đảo
ngược lại trạng thái logic của toán hạng đó Nếu điều kiện toán hạng là true thì phủ định nó sẽ là false.
!(A && B) true
Trang 572.5 Toán tử
oToán tử gán
Toán
+=Cộng toán hạng phải với toán hạng tráiC += A C = C
Trang 582.5 Toán tử
oToán tử điều kiện (ternary) gồm 3 toán hạng, thường được sử dụng để thay thế câu lệnh if else đơn giản
variable = (condition) ? expressionTrue :
Trang 592.6 Không gian tên
oMột namespace được thiết kế để xác định một tập hợp
các tên phân biệt
oTên lớp được khai báo trong một namespace không xung đột với cùng tên lớp được khai báo trong namespace khác
oĐịnh nghĩa, bằng từ khóa namespace sau đó tên
Trang 602.6 Không gian tên
oĐể gọi hàm hoặc biến của namespace, cần thêm nó vào sau tên của namespace:
oVí dụ, namespace1 minh họa về không gian tên
oTừ khóa using được sử dụng khai báo không gian tên Chẳng hạn, khai báo System trong chương trình và lớp Console được định nghĩa trong nó
Trang 612.6 Không gian tên
oVí dụ, khai báo sử dụng không gian tên
using System;
using first_namespace;using second_namespace;
oCó thể lồng không gian tên và truy cập các thành viên của các namespace được lồng vào nhau này bởi sử dụng toán tử dot (.) trong C#, như sau:
oVí dụ, namespace2 minh họa về không gian tên
Trang 622.7 Cấu trúc điều khiển
oCâu lệnh if, khối lệnh được thực thi, nếu điều kiện là
Trang 632.7 Cấu trúc điều khiển
oCâu lệnh if…else…, khối lệnh 1 được thực thi, nếu điều kiện là True, ngược lại khối lệnh 2 được thực thi
Trang 642.7 Cấu trúc điều khiển
oCâu lệnh if…else if…else…, khối lệnh 1 thực thi, nếu điều kiện 1 True, khối lệnh 2 thực thi nếu điều kiện 2 True, khối lệnh 3 thực thi nếu điều kiện 1 và điều kiện 2 là False
Trang 652.7 Cấu trúc điều khiển
- Giá trị expression của lệnh switch được so sánh với mỗi giá trị của case (x)
- Nếu phù hợp thì khối lệnh tương ứng được thực thi
- Khi gặp break, thoát khỏi switch và lệnh sau
switch được thực thi
- Nếu không có case phù hợp với expression thì
khối lệnh sau default được thực thi.
Trang 662.7 Cấu trúc điều khiển
oVí dụ, in ra màn hình tên của ngày trong tuần
Trang 672.7 Cấu trúc điều khiển
- check_dieu_kien: kiểm tra điều kiện để thực thi khối lệnh.
- tang/giam_bien: được thực thi nhiều lần sau khi khối lệnh được
thực thi.
Trang 682.7 Cấu trúc điều khiển
oVí dụ, tăng i lên 2 đơn vị sau mỗi lần lặp:
for (int i = 0; i < 20; i = i+2) {
Console.WriteLine(i);}
Trang 692.7 Cấu trúc điều khiển
oCâu lệnh foreach, được sử dụng để duyệt các phần tử của
oVí dụ, duyệt tất cả các phần tử của mảng cars
string[] cars = { "Honda", "BMW", "Ford", "Mazda" };foreach (string i in cars)
Console.WriteLine(i);}
Trang 702.7 Cấu trúc điều khiển
oCâu lệnh while, được sử dụng để lặp nếu số lần lặp không được xác định trước
Trang 712.7 Cấu trúc điều khiển
Trang 722.7 Cấu trúc điều khiển
oCâu lệnh do…while, tương tự như vòng lặp while, ngoại trừ thực hiện lệnh ít nhất một lần ngay cả khi điều kiện là False
Trang 732.7 Cấu trúc điều khiển
oVí dụ, tính tổng của 5 số tự nhiên đầu tiên:
Console.WriteLine("Tong tu 1 den 5 la " + sum);
oNếu điều kiện luôn là True thì vòng lặp sẽ là lặp vô tận
Trang 742.7 Cấu trúc điều khiển
oCâu lệnh nhảy goto, nhảy đến một dòng cụ thể trong chương trình, được xác định bằng một nhãn (label)
Trang 752.7 Cấu trúc điều khiển
oCâu lệnh nhảy break, được sử dụng trong lệnh switch, hoặc câu lệnh lặp for, foreach, while, do while dùng để nhảy ra khỏi cấu trúc điểu
Trang 762.7 Cấu trúc điều khiển
oCâu lệnh nhảy continue, được sử dụng trong câu lệnh lặp for, foreach, while, do while Thoát ngay lần lặp hiện tại của vòng lặp để bắt đầu lần lặp mới
Trang 772.7 Cấu trúc điều khiển
oCâu lệnh nhảy return, dùng để thoát khỏi phương thức của một lớp, trả điều khiển trở về nơi gọi phương thức
◦Không trả về kiểu dữ liệu gì nếu phương thức là void
◦Hoặc trả về một giá trị có kiểu dữ liệu thích hợp với kiểu dữ liệu của phương thức
Trang 782.8 Mảng (Array)
oMảng là một đối tượng chứa các phần tử có kiểu dữ liệu giống nhau Mảng lưu các phần tử theo chỉ mục, chỉ mục của phần tử đầu tiên là 0
oTạo một mảng, chưa khởi tạo số phần tử:
type[] biếnmảng;
oVí dụ, khai báo biến mảng:
string[] xe = {"Honda", "Kia", "Ford", "Mazda", "Toyota"};
int[] a = {10, 20, 30, 40};
Trang 792.8 Mảng (Array)
oTruy cập một phần tử mảng bằng cách sử dụng số chỉ mục (index)
oVí dụ, truy xuất phần tử có chỉ mục là 0 trong mảng:
string[] xe = {"Honda", "Kia", "Ford", "Mazda", "Toyota"};Console.WriteLine(xe[0]);
oXác định số phần tử một mảng, sử dụng thuộc tính Length:
Console.WriteLine(xe.Length);
Trang 802.8 Mảng (Array)
oDuyệt các phần tử trong mảng sử dụng vòng lặp for, foreach
oVí dụ, truy xuất các phần tử bằng for:
string[] cars = {"Honda", "Kia", "Ford", "Mazda", "Toyota"};for (int i = 0; i < cars.Length; i++)
Console.WriteLine(cars[i]);}
Trang 812.8 Mảng (Array)
oVí dụ, truy xuất các phần tử bằng foreach:
string[] xe = {"Honda", "Kia", "Ford", "Mazda", "Toyota"};
foreach (string i in xe)
Trang 822.8 Mảng (Array)
oTrong không gian tên System.Linq, có nhiều phương thức xử lý mảng như Min, Max và Sum
oVí dụ, myArray khai báo không gian tên using System.Linq, để sử dụng phương thức:
int[] munbers = {14, 3, 25, 9, 21};
Console.WriteLine("Gia tri lon nhat:"+ numbers.Max()); Console.WriteLine("Gia tri nho nhat:"+ numbers.Min()); Console.WriteLine("Tong gia tri:"+ numbers.Sum());