Bài giảng Công nghệ phần mềm nâng cao - Phạm Ngọc Hùng - Implementation

z Giớithiệu

z Mô hình triểnkhaiUSDP

z Mộtsốnguyên tắc trong lậptrình

z Phong cách lậptrình

z Lập trình trong Java

− Triển khai các gói

− Triển khai các controller

− KếtnốiCSDL

− Triểnkhaigiaodiện

pdf39 trang | Chuyên mục: Công Nghệ Phần Mềm | Chia sẻ: dkS00TYs | Lượt xem: 1629 | Lượt tải: 1download
Tóm tắt nội dung Bài giảng Công nghệ phần mềm nâng cao - Phạm Ngọc Hùng - Implementation, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ch−¬ng trình cÇn dÔ hiÓu
7Tốc độ viết mã nguồn
• Tèc ®é ph¸t triÓn cao ≠ lµm ng¾n ch−¬ng trình
nguån
- tèc ®é kh«ng tû lÖ thuËn víi sè dßng lÖnh
- c©u lÖnh phøc t¹p lµm gi¶m ®é dÔ hiÓu
• Ng«n ngữ møc cao (4GL)
- năng lùc biÓu diÔn cao
- tèc ®é ph¸t triÓn nhanh
8Sơ đồ tổng quan của implementation
Detailed design
- pseudocode?
- flowcharts?
For each ... framework package 
...application package:
Architecture
For each class:Requirements
2. Implement methods
-- see section tbd
5. Release
for inte-
gration
-- see 
chpt. 9
1. Define coding 
standards
4. Perform 
unit testing
-- see chpt. 8
3. Inspect class
-- see section tbd
9Chuẩn bị cho implementation
z Xác thực các thiết kế chi tiết bạn phải
triển khai
− Mã nguồn chỉ được viết từ thiết kế
z Hiểu các chuẩn
− Cho lập trình
− Cho tài liệu
z Ước lượng kích cỡ và thời gian
− Dựa vào các dữ liệu trong quá khứ
− Chia các thành phần có kích cỡ khoảng
100 LOC
10
Mô hình triển khai USDP
Triển khai hệ thống con
«file»
Area.java
Mô hình triển khaiMô hình thiết kế
Area
«trace»
File Area.java triển khai
lớp Area (có một “trace” giữa chúng)
AnotherClass
Thành phần
triển khai
11
Mô hình triển khai USDP
Triển khai hệ thống con
«trace»
Giao diện được cung cấp
bởi
lớp thiết kế và thành phần
triển khai
«file»
Area.class
«compilation»
AnotherClass
«file»
readme.txt
«explain»
«file»
impl.jar
«compress»
«file»
Area.java
Area
Mô hình thiết kế
Mô hình triển khai
12
Một số nguyên tắc trong lập trình
1. Cố gắng tái sử dụng
2. ENFORCE INTENTIONS
z “If your code is intended to be used in 
particular ways only, write it so that the 
code cannot be used in any other way”.
13
ENFORCE INTENTIONS
z Nếu một phần tử (lớp, hàm, biến, …) không
dược sử dụng bởi các chức năng khác
− Định nghĩa chúng là private hoặc protected, …
z Sử dụng các toán tử như final, abstract, …
14
ENFORCE INTENTIONS
z Có cái nhìn tổng thể, chương trình là
cục bộ
− Xây dựng các phần tử của chương trình:
z … cục bộ nhất có thể
z … vô hình nhất có thể
• Các thuộc tính private
• Truy cập chúng bằng nhiều hàm truy cập (nếu yêu cầu) 
• Các thuộc tính protected
15
Phong cách lập trình
H−íng tíi phong c¸ch lµm cho m· nguån
• dÔ hiÓu, dÔ söa ®æi
• an toµn (Ýt lçi)
■ Bao gåm c¸c yÕu tè:
• c¸ch ®Æt tªn hµm vµ biÕn
• c¸ch x©y dùng c©u lÖnh, cÊu tróc ch−¬ng trình
• c¸ch viÕt chó thÝch
Ng−êi kh¸c cã thÓ hiÓu ®−îc, b¶o tri ®−îc
16
Tại sao cần dễ hiểu
PhÇn mÒm lu«n cÇn söa ®æi
- söa lçi
- n©ng cÊp
kÐo dµi tuæi thä, n©ng cao hiÖu qu¶ kinh tÕ
NÕu kh«ng dÔ hiÓu
- b¶o trì tèn thêi gian, chi phÝ cao
- t¸c gi¶ ph¶i b¶o trì suèt vßng ®êi cña phÇn mÒm
- b¶n th©n t¸c gi¶ còng kh«ng hiÓu
17
Chú thích
Mäi ®iÒu ®−îc Chó thÝch trong ch−¬ng trình
■ Môc ®Ých sö dông cña c¸c biÕn
■ Chøc năng cña khèi lÖnh, c©u lÖnh
• c¸c lÖnh ®iÒu khiÓn
• c¸c lÖnh phøc t¹p
■ Chó thÝch c¸c m« ®un
• môc ®Ých, chøc năng cña m« ®un 
• tham sè, gi¸ trÞ tr¶ l¹i (giao diÖn)
• c¸c m« ®un thuéc cÊp
• cÊu tróc, thuËt to¸n
• nhiÖm vô cña c¸c biÕn côc bé
• t¸c gi¶, ng−êi kiÓm tra, thêi gian
18
Đặt tên
ĐÆt tªn biÕn, tªn hµm cã nghÜa, gîi nhí
■ Sö dông c¸c ký hiÖu, tõ tiÕng Anh cã nghÜa
■ Lµm cho dÔ ®äc
• dïng DateOfBirth hoÆc date_of_birth
• kh«ng viÕt dateofbirth
■ Tr¸nh ®Æt tªn qu¸ dµi
• kh«ng ®Æt tªn dµi víi c¸c biÕn côc bé
■ Thèng nhÊt c¸ch dïng
• tªn líp b¾t ®Çu b»ng chữ hoa, tªn h»ng toµn chữ hoa
• tªn biÕn b¾t ®Çu b»ng chữ th−êng
• i cho vßng lÆp, tmp cho c¸c gi¸ trÞ t¹m thêi...
19
Câu lệnh
■ C¸c c©u lÖnh ph¶i m« t¶ cÊu tróc
• tôt lÒ, dÔ ®äc, dÔ hiÓu
■ Lµm ®¬n gi¶n c¸c lÖnh
• mçi lÖnh trªn mét dßng
• triÓn khai c¸c biÓu thøc phøc t¹p
• h¹n chÕ truyÒn tham sè lµ kÕt qu¶ cña hµm, biÓu thøc
printf("%s", strcpy(des, src));
■ Tr¸nh c¸c cÊu tróc phøc t¹p:
• c¸c lÖnh if lång nhau
• ®iÒu kiÖn phñ ®Þnh if not
20
Hàm và biến cục bộ
■ Ch−¬ng trình cÇn ®−îc chia thµnh nhiÒu m« ®un
(hµm)
■ Kh«ng viÕt hµm qu¸ dµi
• Pre và Post conditions
• kh«ng qu¸ 2 trang mµn hình
• t¹o ra c¸c hµm thø cÊp ®Ó gi¶m ®é dµi tõng hµm
■ Kh«ng dïng qu¸ nhiÒu biÕn côc bé
• kh«ng thÓ theo dâi ®ång thêi ho¹t ®éng
cña nhiÒu biÕn
(vd. kh«ng qu¸ 7 biÕn côc bé)
21
Xử lý lỗi
■ Cã thÓ ph¸t hiÖn lçi trong khi thùc hiÖn
• lçi chia 0
• lçi input/output, …
■ Xö lý lçi
• nhÊt qu¸n trong xö lý: ph©n lo¹i lçi; thèng nhÊt
®Þnh d¹ng th«ng b¸o,…
• ph©n biÖt output vµ th«ng b¸o lçi
• c¸c hµm th− viÖn nªn tr¸nh viÖc tù xö lý, tù ®−a ra
th«ng b¸o lçi
22
Output và thông báo lỗi
■ Output lµ dữ liÖu, cßn ®−îc dïng ®Ó lµm input
cho phÇn mÒm kh¸c
■ Th«ng b¸o (lçi) lµ c¸c th«ng tin nhÊt thêi,
tr¹ng th¸i hÖ thèng, lçi vµ c¸ch kh¾c phôc
■ CÇn t¸ch output vµ th«ng b¸o lçi
23
Xử lý lỗi trong các hàm thư viện
■ Ng−êi viÕt vµ ng−êi sö dông th− viÖn lµ kh¸c nhau
■ Ng−êi sö dông th−êng muèn cã c¸ch xö lý riªng
■ Hµm th− viÖn tr¶ l¹i tr¹ng th¸i lçi, kh«ng tù xö lý
• tr¶ tr¹ng th¸i b»ng gi¸ trÞ tr¶ l¹i
• tr¶ tr¹ng th¸i b»ng tham sè
• tr¶ l¹i b»ng nÐm ngo¹i lÖ (trong c¸c OOL)
int lookup(int a[], int key, int& err_code){ if (not found) err_code = 0;else err_code =1;}
24
Ngoại lệ
z Lµ c¸ch thøc xö lý lçi tiÕn tiÕn trong c¸c
ng«n ngữ h−íng ®èi t−îng
• m«®un xö lý nÐm ra mét ngo¹i lÖ (®èi t−îng
chøa th«ng tin lçi)
• m«®un ®iÒu khiÓn b¾t ngo¹i lÖ (nÕu cã) 
z T¸ch phÇn xö lý lçi khái phÇn cµi ®Æt
thuËt to¸n th«ng th−êng, lµm cho
ch−¬ng trình dÔ ®äc h¬n
z DÔ dïng h¬n, an toµn h¬n
25
Ném ngoại lệ
public Object pop() { 
Object obj; 
if (size == 0) { 
throw new EmptyStackException();
} 
obj = objectAt(size - 1); 
setObjectAt(size - 1, null); 
size--; return obj; 
} 
26
Bắt ngoại lệ
try { 
Object obj = cacheAccess.get("foo"); 
// ... lots of lines here ... 
} 
catch (CacheException ex) { ex.printStackTrace(); 
Exception base = ex.getBaseException(); 
if (base != null) 
base.printStackTrace(); 
} 
catch (Exception ex) 
{ 
// handle other exceptions
} 
27
Giao diện của modun
■ Thèng nhÊt ®Þnh d¹ng
• thø tù truyÒn tham sè
• strcpy(des, src)
■ KiÓm tra tÝnh hîp lÖ cña d÷ liÖu
• chØ thùc hiÖn xö lý víi dữ liÖu hîp lÖ
■ Lµm ®¬n gi¶n giao diÖn (gi¶m ®é ghÐp nèi)
• kh«ng truyÒn thõa tham sè
• t×m c¸ch kÕt hîp c¸c kho¶n môc liªn quan
28
Phong cách lập trình tốt
■ Tu©n theo c¸c chuÈn th«ng dông
■ ChuÈn ®−îc chÊp nhËn réng r·i h¬n dÔ hiÓu h¬n
■ Chó gi¶i ®Çy ®ñ mçi khi kh«ng tu©n theo chuÈn
"Ng−êi kh¸c cã hiÓu ®−îc kh«ng?"
29
Triển khai các gói (packages)
z Gói: cung cấp cơ chế cho việc sử dụng lại
mã nguồn
z Java: cung cấp cơ chế định nghĩa các gói
z Các bước định nghĩa gói
− Định nghĩa các lớp thuộc gói.
− Sử dụng câu lệnh “package” để đánh tên gói
− Dịch thành file .class
− Sử dụng .class bằng câu lệnh “import”
30
Triển khai các controller
z Controller: Thực hiện các hành vi hoặc
yêu cầu chức năng của HT
z Triển khai controller tương tự như các
ngôn ngữ lập trình khác
z Tốt nhất là sử dụng các lớp abstract và
interface.
31
Ví dụ về abstract class 
public abstract class LivingThing { 
public void breath(){ 
System.out.println("Living Thing breathing..."); 
} 
public void eat(){ 
System.out.println("Living Thing eating..."); 
} 
/** 
* abstract method walk 
* We want this method to be overridden by subclasses of 
* LivingThing
*/ 
public abstract void walk(); 
} 
32
Ví dụ về abstract class
public class Human extends LivingThing {
public void walk(){ 
System.out.println("Human walks..."); 
} 
} 
33
Interface
//Cach dinh nghia interface
public interface [InterfaceName] {
//some methods without the body
}
public interface Relation
{
public boolean isGreater( Object a, Object b);
public boolean isLess( Object a, Object b);
public boolean isEqual( Object a, Object b);
}
34
Triển khai
/**
* This class defines a line segment
*/
public class Line implements Relation {
private double x1;
private double x2;
private double y1;
private double y2;
public Line(double x1, double x2, double y1, double y2){
this.x1 = x1;
this.x2 = x2;
this.y1 = y1;
this.y2 = y2;
}
35
Triển khai
public double getLength(){
double length = Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)* (y2-y1));
return length;
}
public boolean isGreater( Object a, Object b){
double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength();
return (aLen > bLen);
}
public boolean isLess( Object a, Object b){
double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength();
return (aLen < bLen);
}
public boolean isEqual( Object a, Object b){
double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength();
return (aLen == bLen);
}
}
36
Kết nối CSDL
z Java Database Connectivity (JDBC)
z java.sql
import java.sql.*;
public class DBAthlete() {
private Connection connection;
private PCLAthlete athleteList;
...
}
37
Kết nối CSDL
z 3 thông tin quan trọng cho kết nối CSDL
− URL (Uniform Resource Locator)
− Username
− Password
//constructor to connect
public DBAthlete() {
String url = “jdbc:odbc:ABLDatabase”;
String username = “scott”;
String username = “tiger”;
try {
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
connection = DriverManager.getConnection
(url, username, password);
}
catch (ClassNotFoundException) {
... 
}
}
38
Triển khai giao diện
z Abstract Windowing Toolkit (AWT) vs. Swing
//an example
import java.awt.*;
public class GraphicPanel extends Panel {
GraphicPanel() {
setBackground(Color.black);
}
public void paint(Graphics g) {
g.setColor(new Color(0,255,0)); //green
g.setFont(new Font("Helvetica",Font.PLAIN,16));
g.drawString("Hello GUI World!", 30, 100);
g.setColor(new Color(1.0f,0,0)); //red
g.fillRect(30, 100, 150, 10);
}
//continued...
39
Thông báo
z Các nhóm nộp tài liệu thiết kế
− Deadline: 5:00PM, ngày 30/10/2009
z Nộp phần mềm (sản phẩm thực thi)
− Chương trình
− Tài liệu
− Deadline: 5:00PM, ngày 13/11/2009
z Cách nộp
− Qua email Thầy Hà (hanv@vnu.edu.vn)
z Nội dung học tuần sau
− Kiểm thử (Testing)

File đính kèm:

  • pdfBài giảng Công nghệ phần mềm nâng cao - Phạm Ngọc Hùng - Implementation.pdf