際際滷

際際滷Share a Scribd company logo
Implementation
N畛i dung
 Gi畛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


                                     2
Ti 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 ti li畛u i畛n t畛 kh叩c




                                       3
Gi畛i thi畛u

Tri畛n khai (implementation) # l畉p tr狸nh
(programming)
   Implementation = tri畛n khai thi畉t k畉 chi ti畉t
    thnh ch動董ng tr狸nh
      S畛 d畛ng l畉i m達 ngu畛n/c叩c thnh ph畉n
      L畉p tr狸nh n畉u kh担ng ho畉c kh坦 s畛 d畛ng l畉i
      T鱈ch h畛p c叩c thnh ph畉n
M畛c ti棚u
   S畉n ph畉m ph畉n m畛m t畛t

                                                    4
L畉p tr狸nh hi畛u qu畉

     S其n phm phn mm t竪t
        ph息n tch t竪t
        thit k t竪t
        lp tr狸nh t竪t
        kim th旦 cht ch

    k端 thut lp tr狸nh t竪t
        chuy捉n nghip (tu息n theo c存c chun)
        脱n 速nh
        hiu qu其

                                               5
Ti畉n h坦a c畛a k畛 thu畉t l畉p tr狸nh

 Lp tr狸nh hiu qu其 h測n, s其n phm r tin h測n
      T竪c 速辿 ph存t trin cao h測n
         - nng l湛c biu din cao h測n
        - kh其 nng s旦 d担ng l孫i cao h測n
      D b其o tr狸 h測n
        - d hiu, d s旦a 速脱i
      Cht l樽ng cao h測n
        - s旦 d担ng c存c cu tr坦c an to袖n h測n

            ch測ng tr狸nh cn d hiu

                                                6
T畛c 畛 vi畉t m達 ngu畛n


 T竪c 速辿 ph存t trin cao  l袖m ng他n ch測ng tr狸nh
ngu奪n
  - t竪c 速辿 kh束ng t短 l thun v鱈i s竪 dng lnh
  - c息u lnh ph淡c t孫p l袖m gi其m 速辿 d hiu

 Ng束n ng畛 m淡c cao (4GL)
  - nng l湛c biu din cao
  - t竪c 速辿 ph存t trin nhanh



                                                  7
S董 畛 t畛ng quan c畛a implementation
 1. Define coding
                                                                  Architecture
 standards

                    For each ... framework package
                             ...application package:

Requirements            For each class:
                                                                    5. Release
                            2. Implement methods                    for inte-
                            -- see section tbd
                                                                    gration
Detailed design                                                     -- see
- pseudocode?                                                       chpt. 9

- flowcharts?
                                                 4. Perform
                     3. Inspect class
                     -- see section tbd          unit testing
                                                 -- see chpt. 8
                                                                              8
Chu畉n b畛 cho implementation

  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畉
  Hi畛u c叩c chu畉n
     Cho l畉p tr狸nh
     Cho ti li畛u
  働畛c l動畛ng k鱈ch c畛 v th畛i gian
     D畛a vo c叩c d畛 li畛u trong qu叩 kh畛
     Chia c叩c thnh ph畉n c坦 k鱈ch c畛 kho畉ng
      100 LOC
                                              9
M担 h狸nh tri畛n khai USDP
M担 h狸nh thi畉t k畉                     M担 h狸nh tri畛n khai

                    Thnh ph畉n
                    tri畛n khai     Tri畛n khai h畛 th畛ng con

AnotherClass


                   束trace損                 束file損
    Area                                   Area.java



               File Area.java tri畛n khai
               l畛p Area (c坦 m畛t trace gi畛a ch炭ng)

                                                             10
M担 h狸nh tri畛n khai USDP
                                        M担 h狸nh tri畛n khai
M担 h狸nh thi畉t k畉
                                                               束file損
                                                  束compress損
                                                               impl.jar
AnotherClass
                                    Tri畛n khai h畛 th畛ng con
                    束trace損
Area                                     束file損
                                         Area.java
                                                          束file損
                                                          readme.txt

       Giao di畛n 動畛c cung c畉p           束compilation損
       b畛i                                               束explain損
                                           束file損
       l畛p thi畉t k畉 v thnh ph畉n
       tri畛n khai                          Area.class
                                                                        11
M畛t s畛 nguy棚n t畉c trong l畉p tr狸nh

1. C畛 g畉ng t叩i s畛 d畛ng
2. 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.




                                          12
ENFORCE INTENTIONS

  N畉u m畛t ph畉n t畛 (l畛p, hm, bi畉n, ) kh担ng

  d動畛c s畛 d畛ng b畛i c叩c ch畛c nng kh叩c

     畛nh ngh挑a ch炭ng l private ho畉c protected, 

  S畛 d畛ng c叩c to叩n t畛 nh動 final, abstract, 




                                                  13
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 hm truy c畉p (n畉u y棚u c畉u)
         C叩c thu畛c t鱈nh protected




                                                             14
Phong c叩ch l畉p tr狸nh

 Bao g奪m c存c yu t竪:
   c存ch 速t t捉n h袖m v袖 bin
   c存ch x息y d湛ng c息u lnh, cu tr坦c ch測ng tr狸nh
   c存ch vit ch坦 thch

 H鱈ng t鱈i phong c存ch l袖m cho m揃 ngu奪n
    d hiu, d s旦a 速脱i
    an to袖n (t l巽i)

 Ng棚i kh存c c達 th hiu 速樽c, b其o tri 速樽c
                                             15
T畉i sao c畉n d畛 hi畛u

 Phn mm lu束n cn s旦a 速脱i
  - s旦a l巽i
  - n息ng cp

       ko d袖i tu脱i th辰, n息ng cao hiu qu其 kinh t

Nu kh束ng d hiu
 - b其o tr狸 t竪n th棚i gian, chi ph cao
 - t存c gi其 ph其i b其o tr狸 su竪t vng 速棚i c単a phn mm
 - b其n th息n t存c gi其 c嘆ng kh束ng hiu

                                                 16
Ch炭 th鱈ch

 M辰i 速iu 速樽c Ch坦 thch trong ch測ng tr狸nh
      M担c 速ch s旦 d担ng c単a c存c bin
      Ch淡c nng c単a kh竪i lnh, c息u lnh
         c存c lnh 速iu khin
         c存c lnh ph淡c t孫p
      Ch坦 thch c存c m束 速un
         m担c 速ch, ch淡c nng c単a m束 速un
         tham s竪, gi存 tr tr其 l孫i (giao din)
         c存c m束 速un thu辿c cp
         cu tr坦c, thut to存n
         nhim v担 c単a c存c bin c担c b辿
         t存c gi其, ng棚i kim tra, th棚i gian
                                                 17
畉t t棚n
t t捉n bin, t捉n h袖m c達 ngha, g樽i nh鱈
  S旦 d担ng c存c k箪 hiu, t探 ting Anh c達 ngha
  L袖m cho d 速辰c
       d誰ng DateOfBirth hoc date_of_birth
       kh束ng vit dateofbirth
  Tr存nh 速t t捉n qu存 d袖i
       kh束ng 速t t捉n d袖i v鱈i c存c bin c担c b辿
  Th竪ng nht 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 bin b他t 速u b損ng ch畛 th棚ng
     i cho vng lp, tmp cho c存c gi存 tr t孫m th棚i...
                                                        18
C但u l畛nh

 C存c c息u lnh ph其i m束 t其 cu tr坦c
          t担t l, d 速辰c, d hiu
 L袖m 速測n gi其n c存c lnh
      m巽i lnh tr捉n m辿t dng
     trin khai c存c biu th淡c ph淡c t孫p
     h孫n ch truyn tham s竪 l袖 kt qu其 c単a h袖m, biu th淡c
      printf("%s", strcpy(des, src));
 Tr存nh c存c cu tr坦c ph淡c t孫p:
     c存c lnh if l奪ng nhau
     速iu kin ph単 速nh if not

                                                        19
Hm v bi畉n c畛c b畛

 Ch測ng tr狸nh cn 速樽c chia th袖nh nhiu m束 速un
  (h袖m)
 Kh束ng vit 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淡 cp 速 gi其m 速辿 d袖i t探ng h袖m
 Kh束ng d誰ng qu存 nhiu bin c担c b辿
      kh束ng th theo d但i 速奪ng th棚i ho孫t 速辿ng
       c単a nhiu bin
       (vd. kh束ng qu存 7 bin c担c b辿)
                                                      20
X畛 l箪 l畛i


 C達 th ph存t hin l巽i trong khi th湛c hin
       l巽i chia 0
      l巽i input/output, 
 X旦 l箪 l巽i
       nht qu存n trong x旦 l箪: ph息n lo孫i l巽i; th竪ng nht
       速nh d孫ng th束ng b存o,
       ph息n bit output v袖 th束ng b存o l巽i
       c存c h袖m th vin n捉n tr存nh vic t湛 x旦 l箪, t湛 速a ra
       th束ng b存o l巽i


                                                              21
Output v th担ng b叩o l畛i


 Output l袖 d畛 liu, cn 速樽c d誰ng 速 l袖m input
  cho phn mm kh存c
 Th束ng b存o (l巽i) l袖 c存c th束ng tin nht th棚i,
  tr孫ng th存i h th竪ng, l巽i v袖 c存ch kh他c ph担c
 Cn t存ch output v袖 th束ng b存o l巽i




                                                  22
X畛 l箪 l畛i trong c叩c hm th動 vi畛n


 Ng棚i vit v袖 ng棚i s旦 d担ng th vin l袖 kh存c nhau
 Ng棚i s旦 d担ng th棚ng mu竪n c達 c存ch x旦 l箪 ri捉ng
 H袖m th vin 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 nm 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;
}
                                                  23
Ngo畉i l畛

   L袖 c存ch th淡c x旦 l箪 l巽i tin tin trong c存c
   ng束n ng畛 h鱈ng 速竪i t樽ng
     m束速un x旦 l箪 nm ra m辿t ngo孫i l (速竪i t樽ng
     ch淡a th束ng tin l巽i)
    m束速un 速iu khin b他t ngo孫i l (nu c達)
   T存ch phn x旦 l箪 l巽i kh叩i phn c袖i 速t
   thut to存n th束ng th棚ng, l袖m cho
   ch測ng tr狸nh d 速辰c h測n
   D d誰ng h測n, an to袖n h測n

                                                   24
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;
}

                                          25
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
 }


                                                         26
Giao di畛n c畛a modun


 Th竪ng nht 速nh d孫ng
      th淡 t湛 truyn tham s竪
      strcpy(des, src)
 Kim tra tnh h樽p l c単a d歎 liu
      ch th湛c hin x旦 l箪 v鱈i d畛 liu h樽p l
 L袖m 速測n gi其n giao din (gi其m 速辿 ghp n竪i)
       kh束ng truyn th探a tham s竪
      tm c存ch kt h樽p c存c kho其n m担c li捉n quan



                                                  27
Phong c叩ch l畉p tr狸nh t畛t


 Tu息n theo c存c chun th束ng d担ng
 Chun 速樽c chp nhn r辿ng r揃i h測n d hiu h測n
 Ch坦 gi其i 速y 速単 m巽i khi kh束ng tu息n theo chun



    "Ng棚i kh存c c達 hiu 速樽c kh束ng?"



                                              28
Tri畛n khai c叩c g坦i (packages)

G坦i: cung c畉p c董 ch畉 cho vi畛c s畛 d畛ng l畉i
m達 ngu畛n
Java: cung c畉p c董 ch畉 畛nh ngh挑a c叩c g坦i
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 thnh file .class
   S畛 d畛ng .class b畉ng c但u l畛nh import


                                                 29
Tri畛n khai c叩c controller

   Controller: Th畛c hi畛n c叩c hnh vi ho畉c
   y棚u c畉u ch畛c nng c畛a HT
   Tri畛n khai controller t動董ng t畛 nh動 c叩c
   ng担n ng畛 l畉p tr狸nh kh叩c
   T畛t nh畉t l s畛 d畛ng c叩c l畛p abstract v
   interface.




                                             30
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();
}



                                                               31
V鱈 d畛 v畛 abstract class



public class Human extends LivingThing {

     public void walk(){
       System.out.println("Human walks...");
     }

}

                                               32
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);
}


                                                    33
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;
    }




                                                               34
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);
     }
}

                                                                            35
K畉t n畛i CSDL

      Java Database Connectivity (JDBC)
      java.sql

import java.sql.*;

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

...
}


                                          36
K畉t n畛i CSDL
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) {
   ...
   }
}
                                                        37
Tri畛n khai giao di畛n

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...

                                                         38
Th担ng b叩o
 C叩c nh坦m n畛p ti li畛u thi畉t k畉
    Deadline: 5:00PM, ngy 30/10/2009
 N畛p ph畉n m畛m (s畉n ph畉m th畛c thi)
    Ch動董ng tr狸nh
    Ti li畛u
    Deadline: 5:00PM, ngy 13/11/2009
 C叩ch n畛p
    Qua email Th畉y H (hanv@vnu.edu.vn)
 N畛i dung h畛c tu畉n sau
    Ki畛m th畛 (Testing)

                                           39
Ad

Recommended

Chirag's khatkhate
Chirag's khatkhate
Ameya Mardolkar
Seqc monthly quiz july10 final
Seqc monthly quiz july10 final
Ameya Mardolkar
Harsh's khatkhate
Harsh's khatkhate
Ameya Mardolkar
August quiz
August quiz
Ameya Mardolkar
Sis.vn ph畉n m畛m k畉 to叩n sas innova 2013 open
Sis.vn ph畉n m畛m k畉 to叩n sas innova 2013 open
Hung Duong Van
St. xaviers science quiz prelims
St. xaviers science quiz prelims
Ameya Mardolkar
SEQCm December 2014
SEQCm December 2014
Ameya Mardolkar
H動畛ng d畉n s畛 d畛ng ph畉n m畛m k畉 to叩n sas Innova Open 2015
H動畛ng d畉n s畛 d畛ng ph畉n m畛m k畉 to叩n sas Innova Open 2015
Hung Duong Van
Ameya's Quiz
Ameya's Quiz
Ameya Mardolkar
Leaderboard Challenge - Ameya's set
Leaderboard Challenge - Ameya's set
Ameya Mardolkar
SEQC Leaderboard Challenge
SEQC Leaderboard Challenge
Ameya Mardolkar
Seqc quiz#10
Seqc quiz#10
Ameya Mardolkar
Seqc oct2015 monthly
Seqc oct2015 monthly
Ameya Mardolkar
Leaderboard Challenge - Paul's set
Leaderboard Challenge - Paul's set
Ameya Mardolkar
SEQC Margao June 2016
SEQC Margao June 2016
Ameya Mardolkar
VG's Leaderboard Challenge Set
VG's Leaderboard Challenge Set
Ameya Mardolkar
Leaderboard Challenge - Gouthami's set
Leaderboard Challenge - Gouthami's set
Ameya Mardolkar
Giao trinh csharp tieng viet[bookbooming.com]
Giao trinh csharp tieng viet[bookbooming.com]
bookbooming1
Giao trinh csharp tieng viet[bookbooming.com]
Giao trinh csharp tieng viet[bookbooming.com]
bookbooming1
Oop 0
Oop 0
Thai Hoc Vu
Clean code
Clean code
Nam Vo
Ng担n ng畛 l畉p tr狸nh C#
Ng担n ng畛 l畉p tr狸nh C#
Tr畉n Thi棚n 畉i
Learning C# (Vietnamese)
Learning C# (Vietnamese)
Nguyen Hung
Phan 1 sv
Phan 1 sv
ChauNguyen83
Design Pattern - Nh畛ng c担ng th畛c vng trong thi畉t k畉
Design Pattern - Nh畛ng c担ng th畛c vng trong thi畉t k畉
Nh畉t Nguy畛n Kh畉c
Chapter1
Chapter1
guest444b10a
Code convention
Code convention
hanoiaptech
K34103001 nhom 01
K34103001 nhom 01
SP Tin K34
Bai1
Bai1
moomvu
Bai1
Bai1
Giang Nguy畛n

More Related Content

Viewers also liked (9)

Ameya's Quiz
Ameya's Quiz
Ameya Mardolkar
Leaderboard Challenge - Ameya's set
Leaderboard Challenge - Ameya's set
Ameya Mardolkar
SEQC Leaderboard Challenge
SEQC Leaderboard Challenge
Ameya Mardolkar
Seqc quiz#10
Seqc quiz#10
Ameya Mardolkar
Seqc oct2015 monthly
Seqc oct2015 monthly
Ameya Mardolkar
Leaderboard Challenge - Paul's set
Leaderboard Challenge - Paul's set
Ameya Mardolkar
SEQC Margao June 2016
SEQC Margao June 2016
Ameya Mardolkar
VG's Leaderboard Challenge Set
VG's Leaderboard Challenge Set
Ameya Mardolkar
Leaderboard Challenge - Gouthami's set
Leaderboard Challenge - Gouthami's set
Ameya Mardolkar
Leaderboard Challenge - Ameya's set
Leaderboard Challenge - Ameya's set
Ameya Mardolkar
SEQC Leaderboard Challenge
SEQC Leaderboard Challenge
Ameya Mardolkar
Leaderboard Challenge - Paul's set
Leaderboard Challenge - Paul's set
Ameya Mardolkar
SEQC Margao June 2016
SEQC Margao June 2016
Ameya Mardolkar
VG's Leaderboard Challenge Set
VG's Leaderboard Challenge Set
Ameya Mardolkar
Leaderboard Challenge - Gouthami's set
Leaderboard Challenge - Gouthami's set
Ameya Mardolkar

Similar to 5 implementation (20)

Giao trinh csharp tieng viet[bookbooming.com]
Giao trinh csharp tieng viet[bookbooming.com]
bookbooming1
Giao trinh csharp tieng viet[bookbooming.com]
Giao trinh csharp tieng viet[bookbooming.com]
bookbooming1
Oop 0
Oop 0
Thai Hoc Vu
Clean code
Clean code
Nam Vo
Ng担n ng畛 l畉p tr狸nh C#
Ng担n ng畛 l畉p tr狸nh C#
Tr畉n Thi棚n 畉i
Learning C# (Vietnamese)
Learning C# (Vietnamese)
Nguyen Hung
Phan 1 sv
Phan 1 sv
ChauNguyen83
Design Pattern - Nh畛ng c担ng th畛c vng trong thi畉t k畉
Design Pattern - Nh畛ng c担ng th畛c vng trong thi畉t k畉
Nh畉t Nguy畛n Kh畉c
Chapter1
Chapter1
guest444b10a
Code convention
Code convention
hanoiaptech
K34103001 nhom 01
K34103001 nhom 01
SP Tin K34
Bai1
Bai1
moomvu
Bai1
Bai1
Giang Nguy畛n
Se01b
Se01b
Ph動董ng H
tong quan chung lthdt va cac van de lien quan
tong quan chung lthdt va cac van de lien quan
nhuannguyenduc
Cac giai phap lap trinh c# final
Cac giai phap lap trinh c# final
Cuong Nguyen Dinh
Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2
Nguy畛n C担ng Hong
Phong cach lap trinh c++
Phong cach lap trinh c++
ptquang160492
Phong cach lap trinh c++
Phong cach lap trinh c++
Informatics and Maths
Bi 1: T畛ng quan - N畛N T畉NG L畉P TRNH 畛NG D畛NG V畛I C#
Bi 1: T畛ng quan - N畛N T畉NG L畉P TRNH 畛NG D畛NG V畛I C#
MasterCode.vn
Giao trinh csharp tieng viet[bookbooming.com]
Giao trinh csharp tieng viet[bookbooming.com]
bookbooming1
Giao trinh csharp tieng viet[bookbooming.com]
Giao trinh csharp tieng viet[bookbooming.com]
bookbooming1
Clean code
Clean code
Nam Vo
Ng担n ng畛 l畉p tr狸nh C#
Ng担n ng畛 l畉p tr狸nh C#
Tr畉n Thi棚n 畉i
Learning C# (Vietnamese)
Learning C# (Vietnamese)
Nguyen Hung
Design Pattern - Nh畛ng c担ng th畛c vng trong thi畉t k畉
Design Pattern - Nh畛ng c担ng th畛c vng trong thi畉t k畉
Nh畉t Nguy畛n Kh畉c
Code convention
Code convention
hanoiaptech
K34103001 nhom 01
K34103001 nhom 01
SP Tin K34
Bai1
Bai1
moomvu
tong quan chung lthdt va cac van de lien quan
tong quan chung lthdt va cac van de lien quan
nhuannguyenduc
Cac giai phap lap trinh c# final
Cac giai phap lap trinh c# final
Cuong Nguyen Dinh
Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2
Nguy畛n C担ng Hong
Phong cach lap trinh c++
Phong cach lap trinh c++
ptquang160492
Bi 1: T畛ng quan - N畛N T畉NG L畉P TRNH 畛NG D畛NG V畛I C#
Bi 1: T畛ng quan - N畛N T畉NG L畉P TRNH 畛NG D畛NG V畛I C#
MasterCode.vn
Ad

5 implementation

  • 2. N畛i dung Gi畛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 2
  • 3. Ti 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 ti li畛u i畛n t畛 kh叩c 3
  • 4. Gi畛i thi畛u Tri畛n khai (implementation) # l畉p tr狸nh (programming) Implementation = tri畛n khai thi畉t k畉 chi ti畉t thnh ch動董ng tr狸nh S畛 d畛ng l畉i m達 ngu畛n/c叩c thnh ph畉n L畉p tr狸nh n畉u kh担ng ho畉c kh坦 s畛 d畛ng l畉i T鱈ch h畛p c叩c thnh ph畉n M畛c ti棚u S畉n ph畉m ph畉n m畛m t畛t 4
  • 5. L畉p tr狸nh hi畛u qu畉 S其n phm phn mm t竪t ph息n tch t竪t thit k t竪t lp tr狸nh t竪t kim th旦 cht ch k端 thut lp tr狸nh t竪t chuy捉n nghip (tu息n theo c存c chun) 脱n 速nh hiu qu其 5
  • 6. Ti畉n h坦a c畛a k畛 thu畉t l畉p tr狸nh Lp tr狸nh hiu qu其 h測n, s其n phm r tin h測n T竪c 速辿 ph存t trin cao h測n - nng l湛c biu din cao h測n - kh其 nng s旦 d担ng l孫i cao h測n D b其o tr狸 h測n - d hiu, d s旦a 速脱i Cht l樽ng cao h測n - s旦 d担ng c存c cu tr坦c an to袖n h測n ch測ng tr狸nh cn d hiu 6
  • 7. T畛c 畛 vi畉t m達 ngu畛n T竪c 速辿 ph存t trin cao l袖m ng他n ch測ng tr狸nh ngu奪n - t竪c 速辿 kh束ng t短 l thun v鱈i s竪 dng lnh - c息u lnh ph淡c t孫p l袖m gi其m 速辿 d hiu Ng束n ng畛 m淡c cao (4GL) - nng l湛c biu din cao - t竪c 速辿 ph存t trin nhanh 7
  • 8. S董 畛 t畛ng quan c畛a implementation 1. Define coding Architecture standards For each ... framework package ...application package: Requirements For each class: 5. Release 2. Implement methods for inte- -- see section tbd gration Detailed design -- see - pseudocode? chpt. 9 - flowcharts? 4. Perform 3. Inspect class -- see section tbd unit testing -- see chpt. 8 8
  • 9. Chu畉n b畛 cho implementation 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畉 Hi畛u c叩c chu畉n Cho l畉p tr狸nh Cho ti li畛u 働畛c l動畛ng k鱈ch c畛 v th畛i gian D畛a vo c叩c d畛 li畛u trong qu叩 kh畛 Chia c叩c thnh ph畉n c坦 k鱈ch c畛 kho畉ng 100 LOC 9
  • 10. M担 h狸nh tri畛n khai USDP M担 h狸nh thi畉t k畉 M担 h狸nh tri畛n khai Thnh ph畉n tri畛n khai Tri畛n khai h畛 th畛ng con AnotherClass 束trace損 束file損 Area Area.java File Area.java tri畛n khai l畛p Area (c坦 m畛t trace gi畛a ch炭ng) 10
  • 11. M担 h狸nh tri畛n khai USDP M担 h狸nh tri畛n khai M担 h狸nh thi畉t k畉 束file損 束compress損 impl.jar AnotherClass Tri畛n khai h畛 th畛ng con 束trace損 Area 束file損 Area.java 束file損 readme.txt Giao di畛n 動畛c cung c畉p 束compilation損 b畛i 束explain損 束file損 l畛p thi畉t k畉 v thnh ph畉n tri畛n khai Area.class 11
  • 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 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. 12
  • 13. ENFORCE INTENTIONS N畉u m畛t ph畉n t畛 (l畛p, hm, bi畉n, ) kh担ng d動畛c s畛 d畛ng b畛i c叩c ch畛c nng kh叩c 畛nh ngh挑a ch炭ng l private ho畉c protected, S畛 d畛ng c叩c to叩n t畛 nh動 final, abstract, 13
  • 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 hm truy c畉p (n畉u y棚u c畉u) C叩c thu畛c t鱈nh protected 14
  • 15. Phong c叩ch l畉p tr狸nh Bao g奪m c存c yu t竪: c存ch 速t t捉n h袖m v袖 bin c存ch x息y d湛ng c息u lnh, cu tr坦c ch測ng tr狸nh c存ch vit ch坦 thch H鱈ng t鱈i phong c存ch l袖m cho m揃 ngu奪n d hiu, d s旦a 速脱i an to袖n (t l巽i) Ng棚i kh存c c達 th hiu 速樽c, b其o tri 速樽c 15
  • 16. T畉i sao c畉n d畛 hi畛u Phn mm lu束n cn s旦a 速脱i - s旦a l巽i - n息ng cp ko d袖i tu脱i th辰, n息ng cao hiu qu其 kinh t Nu kh束ng d hiu - b其o tr狸 t竪n th棚i gian, chi ph cao - t存c gi其 ph其i b其o tr狸 su竪t vng 速棚i c単a phn mm - b其n th息n t存c gi其 c嘆ng kh束ng hiu 16
  • 17. Ch炭 th鱈ch M辰i 速iu 速樽c Ch坦 thch trong ch測ng tr狸nh M担c 速ch s旦 d担ng c単a c存c bin Ch淡c nng c単a kh竪i lnh, c息u lnh c存c lnh 速iu khin c存c lnh ph淡c t孫p Ch坦 thch c存c m束 速un m担c 速ch, ch淡c nng c単a m束 速un tham s竪, gi存 tr tr其 l孫i (giao din) c存c m束 速un thu辿c cp cu tr坦c, thut to存n nhim v担 c単a c存c bin c担c b辿 t存c gi其, ng棚i kim tra, th棚i gian 17
  • 18. 畉t t棚n t t捉n bin, t捉n h袖m c達 ngha, g樽i nh鱈 S旦 d担ng c存c k箪 hiu, t探 ting Anh c達 ngha L袖m cho d 速辰c d誰ng DateOfBirth hoc date_of_birth kh束ng vit dateofbirth Tr存nh 速t t捉n qu存 d袖i kh束ng 速t t捉n d袖i v鱈i c存c bin c担c b辿 Th竪ng nht 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 bin b他t 速u b損ng ch畛 th棚ng i cho vng lp, tmp cho c存c gi存 tr t孫m th棚i... 18
  • 19. C但u l畛nh C存c c息u lnh ph其i m束 t其 cu tr坦c t担t l, d 速辰c, d hiu L袖m 速測n gi其n c存c lnh m巽i lnh tr捉n m辿t dng trin khai c存c biu th淡c ph淡c t孫p h孫n ch truyn tham s竪 l袖 kt qu其 c単a h袖m, biu th淡c printf("%s", strcpy(des, src)); Tr存nh c存c cu tr坦c ph淡c t孫p: c存c lnh if l奪ng nhau 速iu kin ph単 速nh if not 19
  • 20. Hm v bi畉n c畛c b畛 Ch測ng tr狸nh cn 速樽c chia th袖nh nhiu m束 速un (h袖m) Kh束ng vit 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淡 cp 速 gi其m 速辿 d袖i t探ng h袖m Kh束ng d誰ng qu存 nhiu bin c担c b辿 kh束ng th theo d但i 速奪ng th棚i ho孫t 速辿ng c単a nhiu bin (vd. kh束ng qu存 7 bin c担c b辿) 20
  • 21. X畛 l箪 l畛i C達 th ph存t hin l巽i trong khi th湛c hin l巽i chia 0 l巽i input/output, X旦 l箪 l巽i nht qu存n trong x旦 l箪: ph息n lo孫i l巽i; th竪ng nht 速nh d孫ng th束ng b存o, ph息n bit output v袖 th束ng b存o l巽i c存c h袖m th vin n捉n tr存nh vic t湛 x旦 l箪, t湛 速a ra th束ng b存o l巽i 21
  • 22. Output v th担ng b叩o l畛i Output l袖 d畛 liu, cn 速樽c d誰ng 速 l袖m input cho phn mm kh存c Th束ng b存o (l巽i) l袖 c存c th束ng tin nht th棚i, tr孫ng th存i h th竪ng, l巽i v袖 c存ch kh他c ph担c Cn t存ch output v袖 th束ng b存o l巽i 22
  • 23. X畛 l箪 l畛i trong c叩c hm th動 vi畛n Ng棚i vit v袖 ng棚i s旦 d担ng th vin l袖 kh存c nhau Ng棚i s旦 d担ng th棚ng mu竪n c達 c存ch x旦 l箪 ri捉ng H袖m th vin 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 nm 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; } 23
  • 24. Ngo畉i l畛 L袖 c存ch th淡c x旦 l箪 l巽i tin tin trong c存c ng束n ng畛 h鱈ng 速竪i t樽ng m束速un x旦 l箪 nm ra m辿t ngo孫i l (速竪i t樽ng ch淡a th束ng tin l巽i) m束速un 速iu khin b他t ngo孫i l (nu c達) T存ch phn x旦 l箪 l巽i kh叩i phn c袖i 速t thut to存n th束ng th棚ng, l袖m cho ch測ng tr狸nh d 速辰c h測n D d誰ng h測n, an to袖n h測n 24
  • 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; } 25
  • 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 } 26
  • 27. Giao di畛n c畛a modun Th竪ng nht 速nh d孫ng th淡 t湛 truyn tham s竪 strcpy(des, src) Kim tra tnh h樽p l c単a d歎 liu ch th湛c hin x旦 l箪 v鱈i d畛 liu h樽p l L袖m 速測n gi其n giao din (gi其m 速辿 ghp n竪i) kh束ng truyn th探a tham s竪 tm c存ch kt h樽p c存c kho其n m担c li捉n quan 27
  • 28. Phong c叩ch l畉p tr狸nh t畛t Tu息n theo c存c chun th束ng d担ng Chun 速樽c chp nhn r辿ng r揃i h測n d hiu h測n Ch坦 gi其i 速y 速単 m巽i khi kh束ng tu息n theo chun "Ng棚i kh存c c達 hiu 速樽c kh束ng?" 28
  • 29. Tri畛n khai c叩c g坦i (packages) G坦i: cung c畉p c董 ch畉 cho vi畛c s畛 d畛ng l畉i m達 ngu畛n Java: cung c畉p c董 ch畉 畛nh ngh挑a c叩c g坦i 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 thnh file .class S畛 d畛ng .class b畉ng c但u l畛nh import 29
  • 30. Tri畛n khai c叩c controller Controller: Th畛c hi畛n c叩c hnh vi ho畉c y棚u c畉u ch畛c nng c畛a HT Tri畛n khai controller t動董ng t畛 nh動 c叩c ng担n ng畛 l畉p tr狸nh kh叩c T畛t nh畉t l s畛 d畛ng c叩c l畛p abstract v interface. 30
  • 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(); } 31
  • 32. V鱈 d畛 v畛 abstract class public class Human extends LivingThing { public void walk(){ System.out.println("Human walks..."); } } 32
  • 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); } 33
  • 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; } 34
  • 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); } } 35
  • 36. K畉t n畛i CSDL Java Database Connectivity (JDBC) java.sql import java.sql.*; public class DBAthlete() { private Connection connection; private PCLAthlete athleteList; ... } 36
  • 37. K畉t n畛i CSDL 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) { ... } } 37
  • 38. Tri畛n khai giao di畛n 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... 38
  • 39. Th担ng b叩o C叩c nh坦m n畛p ti li畛u thi畉t k畉 Deadline: 5:00PM, ngy 30/10/2009 N畛p ph畉n m畛m (s畉n ph畉m th畛c thi) Ch動董ng tr狸nh Ti li畛u Deadline: 5:00PM, ngy 13/11/2009 C叩ch n畛p Qua email Th畉y H (hanv@vnu.edu.vn) N畛i dung h畛c tu畉n sau Ki畛m th畛 (Testing) 39