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
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:
- Bài giảng Công nghệ phần mềm nâng cao - Phạm Ngọc Hùng - Implementation.pdf