39
Implementation

5 implementation

  • Upload
    tho-da

  • View
    180

  • Download
    3

Embed Size (px)

Citation preview

Implementation

2

Nội dungGiới thiệu

Mô hình triển khai USDP

Một số nguyên tắc trong lập trình

Phong cách lập trình

Lập trình trong Java− Triển khai các gói− Triển khai các controller− Kết nối CSDL− Triển khai giao diện

3

Tài liệu

Pressman, Software Engineering, McGraw Hill (chapter 16)Sommerville, Software Engineering, Addison-Wesley (chapter 19)Giáo trình kỹ nghệ phần mềm (chương 4)Các tài liệu điện tử khác

4

Giới thiệu

Triển khai (implementation) # lập trình(programming)− Implementation = triển khai thiết kế chi tiết

thành chương trìnhSử dụng lại mã nguồn/các thành phầnLập trình nếu không hoặc khó sử dụng lạiTích hợp các thành phần

Mục tiêu− Sản phẩm phần mềm tốt

5

Lập trình hiệu quả

S¶n phÈm phÇn mÒm tèt• ph©n tÝch tèt• thiÕt kÕ tèt• lËp trình tèt• kiÓm thö chÆt chÏ

kü thuËt lËp trình tèt• chuyªn nghiÖp (tu©n theo c¸c chuÈn)• æn ®Þnh• hiÖu qu¶

6

Tiến hóa của kỹ thuật lập trình

LËp trình hiÖu qu¶ h¬n, s¶n phÈm rÎ tiÒn h¬n• Tèc ®é ph¸t triÓn cao h¬n

- năng lùc biÓu diÔn cao h¬n- kh¶ năng sö dông l¹i cao h¬n

• DÔ b¶o trì h¬n- dÔ hiÓu, dÔ söa ®æi

• ChÊt l−îng cao h¬n- sö dông c¸c cÊu tróc an toµn h¬n

ch−¬ng trình cÇn dÔ hiÓu

7

Tốc độ viết mã nguồn

• Tèc ®é ph¸t triÓn cao ≠ lµm ng¾n ch−¬ng trìnhnguå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

8

Sơ đồ 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. Releasefor inte-gration-- see chpt. 9

1. Define coding standards

4. Perform unit testing-- see chpt. 8

3. Inspect class-- see section tbd

9

Chuẩn bị cho implementation

Xác thực các thiết kế chi tiết bạn phảitriển khai− Mã nguồn chỉ được viết từ thiết kếHiểu các chuẩn− Cho lập trình− Cho tài liệuƯớ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 khailớp Area (có một “trace” giữa chúng)

AnotherClass

Thành phầntriển khai

11

Mô hình triển khai USDP

Triển khai hệ thống con«trace»

Giao diện được cung cấpbởi

lớp thiết kế và thành phầntriể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ụng2. ENFORCE INTENTIONS

“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

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, …

Sử dụng các toán tử như final, abstract, …

14

ENFORCE INTENTIONS

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:

… cục bộ nhất có thể… 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 inputcho 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ệ

Lµ c¸ch thøc xö lý lçi tiÕn tiÕn trong c¸cng«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ã)

T¸ch phÇn xö lý lçi khái phÇn cµi ®ÆtthuËt to¸n th«ng th−êng, lµm choch−¬ng trình dÔ ®äc h¬nDÔ 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)

Gói: cung cấp cơ chế cho việc sử dụng lạimã nguồnJava: cung cấp cơ chế định nghĩa các góiCá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

Controller: Thực hiện các hành vi hoặcyêu cầu chức năng của HTTriển khai controller tương tự như cácngôn ngữ lập trình khácTố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 interfacepublic 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 khaipublic 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

Java Database Connectivity (JDBC)java.sql

import java.sql.*;

public class DBAthlete() {private Connection connection;private PCLAthlete athleteList;

...}

37

Kết nối CSDL3 thông tin quan trọng cho kết nối CSDL− URL (Uniform Resource Locator)− Username− Password

//constructor to connectpublic 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

Abstract Windowing Toolkit (AWT) vs. Swing//an exampleimport java.awt.*;public class GraphicPanel extends Panel {

GraphicPanel() {setBackground(Color.black);

}public void paint(Graphics g) {

g.setColor(new Color(0,255,0)); //greeng.setFont(new Font("Helvetica",Font.PLAIN,16));g.drawString("Hello GUI World!", 30, 100);g.setColor(new Color(1.0f,0,0)); //redg.fillRect(30, 100, 150, 10);

}//continued...

39

Thông báo

Các nhóm nộp tài liệu thiết kế− Deadline: 5:00PM, ngày 30/10/2009Nộ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/2009Cách nộp− Qua email Thầy Hà ([email protected])Nội dung học tuần sau− Kiểm thử (Testing)