4/10/2012
Chương 1
Tổng quan về lập trình cho MTĐT
Giảng viên: ThS. Phạm Thanh An
Khoa công nghệ thông tin
Đại học Ngân hàng TP. Hồ Chí Minh
Nội dung trình bày
Khái niệm về chương trình, ngơn ngữ lập
trình, giải thuật
Giới thiệu về Top down Design
Mơ hình phát triển phần mềm
Các cách tiếp cận trong lập trình
Tổng quan về lập trình hướng đối tượng
Kiến trúc .NET Framework và C#
Viết các chương trình đơn giản
Chương trình
program - Là tập hợp các câu
lệnh (chỉ dẫn) được liệt kê theo một trình
tự nhất định nhằm giải quyết một vấn đề.
Chương trình máy tính được viết trên
một ngơn ngữ lập trình.
Theo Niklaus Wirth
Computer
Chương trình = Cấu trúc dữ liệu + Giải thuật
1
4/10/2012
Giải thuật - Algorithm
Giải thuật (Thuật toán - Thuật giải)
Là dãy các câu lệnh (chĩ dẫn) chặt chẽ và
rõ ràng, xác định một trình tự các thao tác
trên một số đối tượng nào đó sao cho sau
một số hữu hạn bước thực hiện ta đạt được
kết quả mong muốn
Câu lệnh, chương trình, phần mềm
Software
Program 2
Program 1
Commands
Commands
Commands
Ngơn ngữ lập trình
Ngơn ngữ lập
trình là ngơn ngữ để viết chương trình.
Ngơn ngữ lập trình bao gồm hệ thống
các ký hiệu, các qui ước về ngữ pháp và
ngữ nghĩa, dùng để xây dựng thành các
chương trình cho máy tính.
Có nhiều loại ngơn ngữ lập trình.
Programming language -
2
4/10/2012
Các lớp Ngơn ngữ lập trình
5GLs
Artificial intelligence
4GLs
ORACLE, SEQUEL, INGRES, ...
HIGH-LEVEL
LANGUAGES
ASSEMBLER LANGUAGES
ForTran, COBOL, C, C++,
LISP, Pascal, Java, ...
Hợp ngữ - Assembler
MACHINE CODE
Nguyên lý Von Neumann
Bao gồm 3 bước: Input –Process -Output
Các bước lập trình
Xác định u cầu
bài tốn
Phân tích bài tốn
Thiết kế Giải thuật
Cài đặt
Kiểm thử
Bảo trì và Cập nhật
3
4/10/2012
Mô tả giải thuật
Ngôn ngữ
tự nhiên
Sơ đồ khối (flow chart)
Mã giả (Pseudocode)
Mô tả bằng ngôn ngữ tự nhiên
Input: Vào a, b thuộc tập R
Ra: Nghiệm phương trình ax + b =0
1.
2.
3.
Nhập 2 số thực a và b
Nếu a =0 thì
2.1. Nếu b = 0,
2.1.1. Phương trinh vơ số nghiệm
2.1.2. Kết thúc giải thuật
2.2. Ngược lại
2.2.1. Phương trình vơ nghiệm
2.2.2. Kết thúc giải thuật
Ngược lại
3.1. Phương trình có nghiệm
3.2. Giá trị nghiệm đó là x = -b/a
3.3. Kết thúc giải thuật
Bằng Sơ đồ khối (Flow Chart)
Begin, End : Bắt đầu, kết thúc
Data input/ out put : Vào ra dữ liệu
Condition expression: Lựa chọn, kiểm tra điều
kiện
Process : Xử lý
Flow line: Luồng xử lý
4
4/10/2012
Ví dụ: Cộng hai số
Ví dụ:
S TAR T
IN P U T n u m
r = n u m M OD 2
r = 0
D I S P L A Y "N u m b e r i s E v e n "
S TO P
Ví dụ:
S TA R T
IN P UT n um
r = num M O D 2
Yes
No
r =0
DISP L AY "N u mb er is E ve n"
D IS PL A Y " N um ber is O d d"
S TOP
5
4/10/2012
Bằng mã giả
Input: Vào a, b thuộc tập R
Ra: Nghiệm phương trình ax + b =0
If a = 0 then
Begin
If b = 0 then
Xuất “Phương trình vơ số nghiệm”
Else
Xuất “Phương trình vơ nghiệm”
End
Else
Xuất “Phương trình có nghiệm x = -b/a”
3 cấu trúc điều khiển cơ bản
Trong lập
trình có 3 cấu trúc cơ bản
Tuần tự: các bước thực hiện tuần tự, từ
trên xuống, mỗi bước thực hiện đúng 1 lần
Lựa chọn: chọn 1 trong 2 hay nhiều thao tác
để thực hiện
Lặp: Một hay nhiều thao tác được lặp lại 1
hay nhiều lần.
Top-down Design
Top-Down Design là kỹ thuật trong chiến lược
chia để trị
Các vấn đề phức tạp có thể được giải quyết
bằng kỹ thuật top-down design hay stepwise
refinement , với qui tắc
Chia bai toán lớn thành các bài tốn con
Tiếp tục chia các bài tốn con đó thành các bài
tốn con nhỏ
Tiếp tục q trình trên khi các bài tốn con có thể
giải quyết dễ dàng
6
4/10/2012
Các phase phát triển phần mềm
Tìm hiểu
và phân tích yêu cầu
Thiết kế
Cài
đặt
thử
Triển khai và Bảo trì hệ thống
Kiểm
Mơ hình WaterFall
Mơ hình WaterFall (tt)
Ưu điểm:
Thích hợp cho những dự án lớn.
Quản lý dự án sẽ dễ dàng và thuận tiện.
Nhược điểm:
Thiếu sự trao đổi giữa người sử dụng và
nhóm phát triển.
Khơng cho phép thay đổi nhiều theo các
đặc tả yêu cầu của hệ thống.
7
4/10/2012
Mơ hình xoắn ốc
Mơ hình xoắn ốc (tt)
Phát triển hệ thống nhanh, sửa lỗi đến khi hoàn thiện.
Ưu điểm:
Linh hoạt trong việc thay đổi yêu cầu.
Nhược điểm:
Các pha bị lặp lại quá nhiều lần.
Tạo nguyên mẫu (prototype)
Tạo các nguyên mẫu cho người sử dụng dùng rồi tạo ra
hoàn thiện hệ thống
Ưu điểm:
Linh hoạt trong việc thay đổi yêu cầu.
Rút ngắn thời gian phát triển.
Nhược điểm:
Khơng thích hợp trong dự án lớn.
8
4/10/2012
Các phương pháp lập trình
Lập trình tuần tự: Assembler (hợp ngữ)
Lập trình cấu trúc (thủ tục/hướng chức năng)
Chương trình quá dài, khó nhớ
Khó kiểm sốt lỗi
Chương trình chính được chia nhỏ thành các
chương trình con
Mỗi chương trình con thực hiện một cơng việc xác
định
Lập trình hướng đối tượng
Lập trình cấu trúc
Chương trình chính
main()
Hàm_1
Hàm_2
Hàm_4
Hàm_7
Hàm_3
Hàm_5
Hàm_8
Hàm_6
Hàm_9
So sánh HĐT và hướng chức năng
Cách tiếp
cận hướng đối tượng
Hệ thống được xem là một tập hợp các đối
tượng cùng làm việc với nhau để
Các đối tượng thực hiện hành động khi được
yêu cầu
Mỗi đối tượng duy trì dữ liệu riêng của nó
Tiếp
cận thủ tục (Procedural approach)
Hệ thống được xem là một tập hợp các thủ
tục tương tác với dữ liệu
Dữ liệu tách rời các thủ tục
9
4/10/2012
So sánh HĐT và hướng chức năng
Tiếp cận hướng chức năng và tiếp cận hướng đối tượng
Khái niệm về hướng đối tượng
Lớp
Đối
(Classes)
tượng (Objects)
Attributes
Methods
Trừu tượng
hóa dữ liệu
gói và che dấu thơng tin
Kế thừa
Đa hình
Bao
Đối tượng
Dữ liệu
Hành vi
- Giây
- Tăng giây
- Phút
- Tăng phút
- Giờ
- Tăng giờ
Đối tượng = Dữ liệu + Hành vi
10
4/10/2012
Đối tượng (tt)
Thuộc tính
Hành vi
•Nhãn hiệu xe
•Màu xe
•Khởi động
•Chạy xe
•Cơng suất
•Dừng xe
•Giá
•Tắt máy
Trừu tượng hóa dữ liệu
Mơ tả bài tốn với những khía cạnh quan trọng nhất
Thu thập và phân tích các đối tượng liên quan, nắm
bắt các đặc trưng cơ bản nhất của chúng và xác định
rõ mối quan hệ giữa các đối tượng với nhau
Bao gói và che dấu thống tin
Lớp đối tượng
DonHang
int MaDH
int MaKH
Tinh_gia();
public:
TaoDH( )
CapnhatDH( )
GiatriDH( )
Bên ngoài
Các phương
thức chung của
đơn hàng
TaoDH
CapnhatDH
GiatriDH
11
4/10/2012
Kế thừa
Người
Sinh viên
Bác sĩ
Nhân viên
Đa hình
Mơi trường phần mềm trước đây
Đối
với người phát triển ứng dụng
Luôn quan tâm tới hệ điều hành
Luôn quan tâm tới công cụ, ngôn ngữ
Bất lợi của DLL và đăng ký vào registry
Phải xác định thiết bị truy cập
Khơng tích hợp được các ngơn ngữ khác
nhau
Khó khăn khi phát triển các ứng dụng phân
tán
12
4/10/2012
Môi trường phần mềm trước đây (tt)
Đối
với người sử dụng
Bất lợi khi phải cài ứng dụng trên máy đơn
Các trang web khơng tương tác với nhau
.NET framework
Tích hợp một số cơng nghệ đã có của Microsoft và
một số cơng nghệ mới nhằm tạo ra giao diện lập trình
mới
Sử dụng mã trung gian
Độc lập với hệ điều hành
Đa ngôn ngữ
Hướng đến ứng dụng Internet
Hỗ trợ WebService
Tốc độ phát triển ứng dụng nhanh
Ứng dụng độc lập với thiết bị client
Tháng 7/2000, Microsoft giới thiệu .Net
Kiến trúc của .Net framework
Gồm hai
thành phần chính
NET common language runtime (CLR)
.NET framework class library (FCL)
13
4/10/2012
Kiến trúc .Net framework
VB
C++
C#
J#
…
ASP .NET
Web Forms Web Services
ASP.NET Mobile Controls
Windows
Forms
ADO .NET: Data and XML
Base Class Library
Common Language Runtime
Visual Studio .NET
Common Language Specification
Operate System
Common Language Runtime - CLR
CLR (Common Language Runtime) là nền tảng
của .NET Framework.
Là công cụ thực thi mã trung gian (tựa JVM)
Biên dịch (Just-in-time compiler)
Thực thi mã nguồn
Quản lý bộ nhớ
Thưc thi luồng (Thread execution)
Xử lý lỗi (Error-handling)
Xác nhận mã nguồn an tồn và các hình thức
khác của việc chính xác mã nguồn (managed
code),
Framework Class Libraries - FCL
Thư viện
lớp.NET Framework
Là một tập hợp hướng đối tượng của các
kiểu dữ liệu được dùng lại (các thư viên lớp
được đóng gói trước cho việc dùng lại),
khoảng 4000 lớp
Được sử dụng bởi bất kỳ ngôn ngữ của
.NET
Hầu hết các lớp được gom vào một không
gian tên gọi là System
14
4/10/2012
.NET framework
là tập hợp của nhiều ý tưởng
OOP
JVM
GUI
.NET
component-based
design
Web
n-tier design
.Net là đa ngôn ngữ
code.vb
code.cs
code.cpp
Development Tools
...
FCL
app.exe
.NET là đa ngôn ngữ (tt)
.Net khơng
chỉ hỗ trợ một ngơn ngữ độc
lập, có thể là sự tích hợp ngơn ngữ trong
một ứng dụng
Có nghĩa là chúng ta có thể xây dựng
một lớp kế thừa code từ các ngôn ngữ
hỗ trợ .NET khác nhau
15
4/10/2012
.Net là độc lập về hệ điều hành
Các ứng
dụng trong Net chạy được trên
bất kỳ các nền tảng hỗ trợ
APP.exe
?
Win64
Win32
(XP,2K,98)
WinCE
Net là độc lập về hệ điều hành
VB
C++
C#
…
.NET
Compiler
Intermedia
Languge
CLR for
Linux
CLR for
Windows
CLR for Unix
Linux Native
code
Windows
Native code
Unix
Native code
.Net là độc lập về hệ điều hành
Thực thi ứng dụng độc lập về hệ điều hành
(Cross-platform) được hiểu theo 2 cách sau:
Các ứng dụng được viết dựa trên Framework Class
Library (FCL), khơng dựa trên OS
Trình biên dịch phát sinh ra ngôn ngữ chung được
thực thi bởi Common Language Runtime (CLR)
16
4/10/2012
Biên dịch trong .NET
Code in VB.NET
Code in C#
Code in another
.NET Language
VB.NET compiler
C# compiler
Appropriate
Compiler
IL(Intermediate
Language) code
CLR (Common Language Runtime)
just-in-time compilation
Biên dịch trong .NET (tt)
Các chương trình được viết bởi ngơn lập trình
được biên dịch vào ngôn ngữ trung gian (ILIntermediate Language), không phải là mã
máy (code machine)
CLR biên dịch lại các mã trung gian (IL code)
vào mã máy tức thời khi thực thi chương
trình, just-in-time (JIT): khi hàm đuợc gọi
Mã JIT tồn tại trong bộ nhớ cho các lần gọi
sau (nếu bộ nhớ cho phép).
Biên dịch trong .NET (tt)
Các mã trung gian là như nhau, dù được viết bởi
ngôn ngữ lập trình nào trong Net.
Sản phẩm IL giống nhau, nên kết quả là một đối
tượng được tạo ra từ ngơn ngữ này có thể được
truy cập hay được dẫn xuất từ một đối tượng
của ngơn ngữ khác trong .NET.
Ví dụ, người phát triển có thể tạo một lớp cơ sở trong
VB.NET và sau đó dẫn xuất nó trong C# một cách dễ
dàng.
17
4/10/2012
Biên dịch trong .NET (tt)
Tại sao phải có 2 lần biên dịch
Độc lập với hệ điều hành
.NET framewwork có thể cài đặt trên nhiều platform
Các chương trình .NET được thực hiện mà khơng có thay
đổi code nào (viết 1 lần, chạy mọi nơi)
Độc lập về ngơn ngữ
Các chương trình .Net khơng bị trói buộc vào một ngơn
ngữ cụ thể nào cả
Các chương trình trong .Net có thể được viết bới các
ngôn ngữ trong Net
Thiết kế ứng dụng trong .Net
Các ứng
dụng nguyên khối (Monolithic
app)
Tất cả source code được biên dịch vào 1
file .exe
APP.exe
Không phải là quy tắc trong windows
Thiết kế ứng dụng trong .Net (tt)
Ứng
dụng dựa trên thành phần
(Component-based)
Component-based app: .EXE + 1 hay nhiều hơn
.DLLs
compute.dll
GUI.exe
data.dll
Đây là chuẩn thực tiễn trên windows
18
4/10/2012
Tại sao phải Component-based
Lập trình
nhóm (team programming)
Phát triển
ứng dụng đa ngôn ngữ (tôi dùng
C#, bạn dùng C++, cô ấy dùng VB.Net)
Sử dụng lại
mã nguồn (code reuse)
Nâng cấp độc
lập (nâng cấp thành phần X)
Các loại ứng dụng trong .NET
Sử
dụng .Net để xây dựng các loại ứng
dụng sau
Ứng dụng Console
Ứng dụng giao diện GUI trên Windows
(Windows Forms)
Ứng dụng web (ASP.NET)
Dịch vụ web service (XML web)
Ứng dụng trên Mobile
Các phiên bản của .Net
.Net framework 1.0
– 2002
– 2003
.Net framework 2.0 – 2005
Net framework 3.5 – 2008
.Net framework 1.1
19
4/10/2012
Assemblies
Các ứng
dụng .Net được đóng gói vào
các phần gọi là assembly
1 assembly = 1 hay nhiều lớp được biên
dịch, gồm một hay nhiều file nguồn
.exe mơ tả gói gồm các lớp với Main()
.Dll mơ tả gói gồm các lớp
Assemblies
code.vb
code.vb
code.cs
Development Tools
.EXE / .DLL
assembly
Cấu trúc chương trình C#
20
4/10/2012
Thực thi ứng dụng .Net
Client cần CLR & FCL để thực thi ứng
dụng .NET
Cài đặt Redistributable .NET Framework
20MB
Chạy trên nền 98 và trở lên, NT (sp6a) trở lên
Thực thi ứng dụng .Net
.DLL
.DLL
.DLL
Apps.EXE
OS Process
other FCL
assemblies
JIT Compiler
obj code
obj code
obj code
obj code
Core FCL
assembly
CLR
Underlying OS and HW
Giới thiệu về C#
C# được xây dựng trên nền tảng C++ và Java
Đơn giản hơn C++
Trình biên dịch C# là hiệu quả nhất trong họ ngôn ngữ
.NET
Là ngôn ngữ lập trình hướng đối tượng, đơn giản, an
tồn, ít từ khóa (80 từ khóa)
C# bao gồm tất cả những hỗ trợ cho cấu trúc, thành
phần component
C# phân biệt chữ hoa chữ thường
Giới thiệu vào 7/2000
21
4/10/2012
C# và các ngôn ngữ khác
C#
mang sức mạnh của C++ với sự dễ
dàng của ngôn ngữ Visual Basic
C# và các ngơn ngữ họ .Net biên dịch ra
IL cịn Java biên dịch ra bytecode (mã
trung gian), sau đó chúng được thực
hiện bằng cách thông dịch hoặc biên
dịch just-in-time trong từng máy ảo
tương ứng
Phiên bản VB.NET ~ C#
Phát triển chương trình minh họa
using System;
class Hello {
static void Main( )
{
// Console from the System namespace
Console.WriteLine("Hello World");
}
}
Phát triển chương trình minh họa
Có
tối thiểu là hai cách để soạn thảo,
biên dịch và thực thi chương trình:
Sử dụng mơi trường phát triển tích hợp
(IDE) Visual Studio .NET
Sử dụng chương trình soạn thảo văn bản
bất kỳ như Notepad rồi dùng biên dịch dòng
lệnh.
22
4/10/2012
Biên dịch thành Assemblies
Tạo một assembly từ một hay nhiều file nguồn
Ví dụ : tạo một có tên assembly
“array.dll” từ file array1.cs:
Tạo file thực thi (Executables)
Tạo flie thực thi sử dụng chỉ dẫn /target:exe
:
Ví dụ: tạo ra file array.exe từ file array1.cs
Tham chiếu một Assembly
Để tham chiếu một assembly, thêm /reference
khi biên dịch file thực thi:
Ví dụ: tạo ra array.exe từ file nguồn array1.cs
tham chiếu đến assembly có tên array2.dll:
23
4/10/2012
Biên dịch và chạy chương trình trình
Sử dụng trinh soạn thảo notepad và DOS
prompt
Step 1 – gõ code trong Notepad
Step 2 – lưu file với phần mở rộng là .cs
Step 3 – Chuyển qua dấu nhắc DOS prompt
và gõ lệnh sau
csc <filename>.cs
Để chạy file C#, gõ tên file không phần mở rộng
Sử dụng IDE VS .NET
Sử dụng IDE VS .NET
Tạo một ứng
dụng console
Xóa đối số (string[] args) trong phương thức
Main( ). Sau đó gõ dịng lệnh sau đây vao
thân của Main():
System.Console.WriteLine("Hello World");
Dịch
chương trình : Build-> Build
Solution
Chạy chương trình : Ctrl+F5 hoặc vào
debug -> start
24
4/10/2012
Tóm tắt
.Net là một nền tảng phát triển phần mềm
Đa ngôn ngữ
Độc lập với hệ điều hành
Sử dụng ngôn ngũ trung gian IL
Hướng đến các ứng dụng phân tán
Phát triển ứng dụng nhanh
Triển khai ứng dụng dễ dàng
An toàn
Hướng đối tượng
Dựa trên nền tảng component
CLR, FCL là nền tảng
Q&A
25