chapter 8....

21
Chapter 8. 소프트웨어구현 Copyright Kim, Haeng Kon E-Mail : [email protected]

Upload: others

Post on 30-Jan-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Chapter 8. 소프트웨어구현

Copyright Kim, Haeng Kon

E-Mail : [email protected]

Page 2: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 2

Software Engineering Roadmap

Plan

project

Integrate

& test system

Analyze

requirements

Design

Maintain

Test units Implement

Identify

corporate

practices

Implement in parts

- use detailed designs

- apply coding standards

- created “implementation model”

(USDP)

Page 3: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 3

Contents

개요

Programming 선택

자료 추상화

Programming Language의 분류

Coding Style

표준화

OOP(Object Oriented Programming)

Page 4: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 4

8.1 개요

Coding 단계 = 구현 = programming 단계

설계 단계에서 작성된 명세서를 이용하여 source code로 변환시키는 단계

module의 내부설계 과정에서 작성된 module 내부 설계 사양서를 “언어(language)”로

기술함으로써 변환하는 작업

목표

명세와 code가 일치하는지 점검

test와 변경을 용이하게 하는 source code와 내부 문서를 작성하는 것

가능한 한 source code를 간결하고 명료하게 작성

Source code를 작성하는 program language의 선택이 중요

Page 5: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 5

개요

Detailed design

- pseudocode?

- flowcharts?

For each (1)... framework package

(2) ...application package ...

For each class ...

Requirements

2. Implement method

-- see section SSS

1. Identify coding

standards

Page 6: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 6

개요

Detailed design

- seudocode?

- flowcharts?

Architecture

For each class: Requirements

2. Implement methods

5. Release for integration

1. Define coding

standards

4. Perform unit testing

3. Inspect class

For each ... framework package

...application package:

Page 7: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 7

8.2 program 언어 선택

Coding 단계에서 programmer가 programming language를 선정할 때 고려하는 요소 Programmer가 그 programming language를 이용

Programmer들은 programming language들의 수와 사용이 통일

어느 기계에나 쉽게 설치 가능

Programmer들은 효율을 고려

Programmer들은 응용 목적에 맞는 programming language를 선정

개인적인 선호

추상화 유사성을 표현하고 차이점을 삭제함으로써 관련된 사항들을 묶어 하나로 표현하는

방법

자료 추상화 자료형의 표현과 그에 관련된 연산들을 함께 묶어 캡슐화(encapsulation)하는 기법

8.3 자료 추상화

Page 8: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 8

8.4 program language의 분류

언어의 개발과정

Fortran

Basic Algol

Alogol 68 Pascal Simula

PL/1

COBOL

ConcurrentPascal

Modula Mesa Euclid Clu

Ada

Lisp

BLCP

C

MaclispAPL

SNOBOL BLISSInterlispForth

SL5

Page 9: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 9

8.5 Coding Style

단순하고 간결성에 역점을 두는 코딩원칙

Coding style을 결정하는 요소

구조적 coding, 문서화 자료선언, 문장의 작성방법

1. 구조적 프로그래밍

신뢰성 있는 software의 생산과 coding의 표준화들을 위해서 개발된 방법

구조적 programming의 diagram에 따라 coding하는데 있어서 그 특징

• 구조화 programming 기법을 적용한 일종의 기능사양

• 자연언어로 기술

• program의 생산성, 신뢰성 및 유지보수성을 향상

구조적 diagram

프로그램

프로그램 개시부

프로그램 처리부

프로그램 종료부

처리 개시부

처리부(조건)

처리 종료부

구체처리

구체처리

구체처리

구체처리

구체처리

Page 10: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 10

Coding Style

1. Confirm the detailed designs you must implement

– code only from a written design

2. Prepare to measure time spent, classified by:

– residual detailed design; detailed design review; coding; coding

review; compiling & repairing syntax defects; unit testing

3. Prepare to record defects using a form

– default: major (requ. unsatisfied), trivial, or neither

– default: error, naming, environment, system, data, other

4. Understand required standards

– for coding

– for the personal documentation you must keep

• see the case study for an example

5. Estimate size and time based on your past data

6. Plan the work in segments of ± 100 LOC

Page 11: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 11

Coding Style

1. Plan the structure and residual design for your code

(complete missing detailed design, if any)

note pre- and post-conditions

note the time spent

2. Self-inspect your design and/or structure

note time spent, defect type, source (phase), severity

3. Type your code

do not compile yet

try methods listed below

apply required standards

code in a manner that is easiest to verify

• use formal methods if appropriate

Page 12: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 12

program의 기본구조

• 순차구조 : 몇 개의 process가 순서적으로 연속된 구조

• 선택 구조 : 어떤 조건에 따라 두 가지 이상의 흐름 중 한 개를 선택하여 수행하는 구조

• 반복구조 : 어떤 조건을 만족할 때까지 program의 수행을 반복하는 routine

program의 기본구조 S1

S2

S3

S1

S2

S3

.

.

.

(a) 순차 구조

S2 S1

S2

(b) 선택 구조

조건T

F

IF 조건SI

S1

S2

(THEN)

(ELSE)

조건

S1

(c) 반복 구조

조건T S1

PERFORM S1UNTL 조건

(조건)

Page 13: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 13

2. code의 문서화

Subroutine program과 compile 단위의 prologue에 대한 전형적인 형식

program의 서두 부분에 쓰이는 서언 비실행문 형식

1) 모듈에 관한 설명

2) 접속관계의 설명

가. 호출 순서, 나. 인수에 관한 설명, 다. 하위급 모듈의 목록

3) 주요 변수의 설명과 사용, 제한사항, 관련자료

4) 모듈의 개발 역사자료

가. 모듈의 설계자, 나. 검토자 및 일자, 다. 변경일자와 변경 내용

ⓐ 저자명 :

ⓑ 컴파일 일시 :

ⓒ 실행할 기능 :

ⓓ 사용할 알고리즘 :

ⓔ 변경자/일시/목적 :

ⓕ 매개변수와 이의 전송 모드 :

ⓖ 입력 단정 :

ⓗ 출력 단정 :

ⓘ 광역 변수 :

ⓙ 부작용 :

ⓚ 주요 자료구조 :

ⓛ 호출 루틴 :

ⓜ 피호출 루틴 :

ⓝ 시간 제약 사항 :

ⓞ 예외 조치 방안 :

ⓟ 가정 :

Page 14: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 14

주석달기 규약

ⓐ 다음을 사용하여 주석의 필요성을 최소화할 것

· 표준 프롤로그

· 구조적 프로그래밍 구조

· 훌륭한 코딩 스타일

· 사용자 정의 자료형, 변수, 형식 매개 변수, 부울 문자, 서브프로그램, 파일등에 대한

문제영역으로부터의 기술적인 명칭

· 사용자 정의 예외, 사용자 정의 자료형, 자료 캡슐화와 같은 구현 언어의 자기 문서화

양상

ⓑ 다음과 같은 기능을 갖는 모드 블록에 주석을 달 것

· 주요 자료 처리의 실행

· goto문을 사용하여 구조적 제어 구조를 가장

· 예외 조치를 실행

ⓒ 주석내에 문제 영역 관련 용어를 사용할 것.

ⓓ 주석을 부가시키기 위해서 빈줄, 테두리, 그리고 만입을 사용할 것

ⓔ 변경과 개정사항등은 맨 우측에 위치하도록 할 것.

ⓕ 분명하지 않은 복잡한 문서를 코드화하기 위해서 긴 주석을 사용하지 말고 코드를

재 작성할 것

ⓖ 주석과 코드는 서로 일치하며, 요구사항과 설계 사양과도 일치하는가를 항상 확인할 것.

Page 15: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 15

3. 자동 programming

Software programming은 설계 database와 추상화 data로 설계된 software 부품

database를 검색하여 번역을 자동적으로 하여 program을 작성

code 생성기

자동 programming을 실행해주는 도구로서 CASE(Computer Aided Software

Engineering)환경에서 사용

Upper-CASE : front-end도구로서 분석과 설계사이의 결합을 메우어 주는 도구

Lower CASE : back-end 도구로서 code 생성기

통합 CASE

개발환경은 다음과 같은 표준화된 문서환경을 제공

입출력 System diagram, 물리적 설계 설명서, screen과 report 출력 형식, field 정

의와 속성, 중간에 생성된 항목의 정의, menu navigation tree, 자료항목 요소들의 논

리적 관계, 자료항목과 module을 설명한 report

Page 16: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 16

8.6 표준화

Programming 표준 항목

goto문이 사용되지 않을 것

program 구조의 nesting 깊이는 5 level을 초과하지 않을 것

Sub routine의 길이는 30 line을 초과하지 않을 것

programming 지침

programmer는 programming 지침의 가치를 이해해야 함

programmer가 지침 수립 시 참여할 수 있는 기회가 제공되어야 함

지침이 성가시게 느껴질 때는 이를 재조사하여 개정 시켜야 함

특수환경에서 지침을 위반해도 되는 mechanism이 있어야 함

자동화 도구는 지침의 준수여부를 수작업으로 검열하는 것은 불가능하며, 자동

check가 실행되지 않으면 그 지침은 가지가 없는 것이어야 함.

Page 17: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 17

8.7 Object Oriented Programming

절차형 programming과 OOP의 차이점

1. 추상화(Abstraction)

주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에 따라 해당 class를 분

류(classification)

객체의 성질을 분해하는 요소분해(factoring)

공통된 성질을 추출하여 슈퍼 클래스를 선정하는 추상화(abstract)

기능 추상화 :method를 정의하는 것

자료 추상화 : 객체가 속하는 class를 설정하는 것

자료 프로시쥬어

절차지향 프로그래밍

프로시져 호출자료와 프로시져 독립 분리

프로시져/자료

객체 객체

객체지향 프로그래밍

메시지 전달객체는 캡슐화

객체/메시지 전달

수동적 능동적 객체메시지

주체

타는것

자동차 말 비행기

specialization

subclassing

Page 18: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 18

2. Encapsulation = 정보은닉(Information hiding)

사용자에게는 상세한 구현을 감추고 필요한 사항만 보이게 함

객체의 전용 자료와 method를 다른 객체가 접근할 수 없음.

보호막과 부분 보호막의 관계

객체전용자료메소드

인터페이스

보호막

메시지 송수신(객체지향 언어)

라이브러리 모듈자료형

프로시져

인터페이스

부분 보호막

프로시져 호출(절차지향 언어)

Page 19: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 19

3. 상속(Inheritance)

Class 계층 구조에서는 상위 class로 갈수록 보다

더 추상화 된 형태이므로 그 sub class들은 상위

class가 가진 속성을 그대로 물려 받는 것

Super class가 가지고 있는 속성인 전용 자료와

method를 sub class가 접근 가능

다중상속 (Multiple inheritance) : 여러 개의

super class로 부터 상속을 허용하는 것

class 계층 구조에서의 상속

4. 다형성(Polymorphism)

동일한 message라도 method가 정의되어 있는 수

신자가 누구인가에 따라 각각 다른 기능을 수행하

는 것

• A print

• B1 print

• C print

A

B1 B2

C

Page 20: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 20

Vending Machine 구현 예

/**********************************************

M A I N . C P P

***********************************************/

#include<iostream.h>

#include<ctime> // time함수

#include<iomanip.h>

#include<windows.h> // Sleep 함수

#include "vendingmachine.h"

#define randomize() srand((unsigned)time(NULL)) // 난수 발생

void main(){

VendingMachine v; // 객체 생성

randomize();

v.Run(); // 실행

}

Page 21: Chapter 8. 소프트웨어구현contents.kocw.net/KOCW/document/2014/deagucatholic/kimhangkon1/10.pdf · 주어진 문제를 해결하기 위하여 객체를 그 구조, 속성, 기능에

Copyright Kim, Haeng Kon 21

void VendingMachine::Run(){

int value[3] = {50, 100, 500}; // 선택되는 금액

int coins=0, minute, people;

int temp;

for(int i=1; i<=24; i++){

people = random(3)+1; // 동시에 오는 사람수

minute = random(60); // 1시간 단위로 시뮬레이션하기에 랜덤 분을 체크

time.setTime(i, minute); // time설정

cout << time << endl; // 현재시간 출력

cout << setw(2) << people << "명이 왔습니다. " << endl; // 사람수 출력

for(int j=1; j<=people; j++){ // 사람수 만큼 자판기를 가동한다.

do{ // 최소 450원 이상의 값을 넣기 위해 while문을 돌린다.

temp = value[random(3)];

money.incCoin(temp); // 들어온 동전을 잔금에 추가한다.

coins += temp; // 총들어온 돈

}while(coins < 450);

if(j >=2){

time.incTime(3);

cout << time << endl;

}

cout << " Insert the coins : " << coins << endl;

cout << " " << coins << "원이 들어왔습니다. " << endl;

User(coins); // 사용자

printStatus(); // 자판기 상태 출력

coins = 0; // 사용이 끝났으므로 초기화

}

Sleep(100); // 시뮬레이션을 위해

}

}