제 1 장 기본 개념

Similar documents
제 1 장 기본 개념

2002년 2학기 자료구조

C++ Programming

슬라이드 1

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Microsoft PowerPoint - [2009] 02.pptx

chap x: G입력

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

K&R2 Reference Manual 번역본

Microsoft PowerPoint - additional01.ppt [호환 모드]

C++ Programming

슬라이드 1

Microsoft PowerPoint - additional03.ppt [호환 모드]

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - C++ 5 .pptx

chap10.PDF

C++ Programming

PowerPoint Template

Microsoft PowerPoint - ch07 - 포인터 pm0415

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

윤성우의 열혈 TCP/IP 소켓 프로그래밍

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

11장 포인터

Blog

(Microsoft PowerPoint - 11\300\345.ppt [\310\243\310\257 \270\360\265\345])

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

프입2-강의노트-C++배경

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - CSharp-10-예외처리

제 1 강 희망의 땅, 알고리즘

C프로-3장c03逞풚

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

설계란 무엇인가?

Microsoft PowerPoint - Chapter 6.ppt

PowerPoint Template

Microsoft PowerPoint - Chapter 1-rev

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

설계란 무엇인가?

PowerPoint Presentation

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

C++ Programming

C++ Programming

설계란 무엇인가?

PowerPoint 프레젠테이션

02장.배열과 클래스

C# Programming Guide - Types

Microsoft PowerPoint - additional08.ppt [호환 모드]

17장 클래스와 메소드

PowerPoint 프레젠테이션

chap 5: Trees

JAVA PROGRAMMING 실습 08.다형성

PowerPoint Template

Microsoft PowerPoint - 9ÀÏ°_ÂüÁ¶ÀÚ.ppt

Microsoft PowerPoint - chap06-2pointer.ppt

쉽게 풀어쓴 C 프로그래밍

Slide 1

Slide 1

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

OCW_C언어 기초

C++ 기본문법 정리

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)


1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, dou

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

<4D F736F F F696E74202D2031C1D6C2F72D31C2F7BDC32028B0ADC0C7C0DAB7E D20C7C1B7CEB1D7B7A1B9D6BEF0BEEE20B0FAB8F1BCD2B

JVM 메모리구조

Microsoft PowerPoint - additional07.ppt [호환 모드]

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

PowerPoint Presentation

The C++ Programming Language 5 장포인터, 배열, 구조체 5.9 연습문제 다음의선언문을순서대로작성해보자. 문자에대한포인터, 10개정수의배열, 10개정수의배열의참조자, 문자열의배열에대한포인터, 문자에대한포인터에대한포인터, 상수정수, 상수

슬라이드 1

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Programming hwp

PowerPoint Presentation

Microsoft PowerPoint - chap12-고급기능.pptx

PowerPoint Presentation

Microsoft PowerPoint - Chap12-OOP.ppt

PowerPoint Presentation

untitled

PowerPoint Template

Microsoft PowerPoint - 02-Class Review.pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

PowerPoint Presentation

초보자를 위한 C# 21일 완성

1. 인라인함수 예 : x, y 값중최소값을반환하는매크로와함수작성 // 매크로로구현한경우 #define MIN(X, Y) ((X) < (Y)? (X) : (Y)) X, Y 각각을괄호 ( ) 안에넣는이유는? // 함수로구현한경우 cout << MIN(4, 5) << en

untitled

080629_CFP °ø°³¿ë.hwp

Microsoft PowerPoint - additional06.ppt [호환 모드]

<432B2BC7C1B7CEB1D7B7A1B9D628BABBB9AE5FC3D6C1BE295B315D2E687770>

C++ Programming

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

Transcription:

제 1 장기본개념

시스템생명주기 (System Life Cycle) 1. 요구사항 (requirement) 프로젝트들의목적을정의한명세들의집합 입력과출력에관한정보를기술 2. 분석 (analysis) 문제들을다룰수있는작은단위들로나눔 상향식 (bottom-up)/ 하향식 (top-down) 접근방법 3. 설계 (design) 추상데이타타입 (abstract data type) 생성 알고리즘명세와설계기법고려 2

시스템생명주기 (System Life Cycle) 4. 정제와코딩 (refinement and coding) 데이타객체에대한표현선택 수행되는연산에대한알고리즘작성 5. 검증 (verification) 정확성증명 (correctness proof) 수학적기법들을이용해서증명 테스트 (testing) 프로그램의정확한수행검증 ex. 모든 if 문과 switch 문의 case 를확인하고있는가? 프로그램의성능검사 오류제거 (error removal) 독립적단위로테스트후전체시스템으로통합 3

소프트웨어개발주기 ( 참고 ) 1. 요구추출 (Requirements Elicitation) 사용자의요구사항을추출하는단계 초기명세의정확성이프로젝트의성패를좌우 2. 요구분석 (Requirements Analysis) 추출된요구의정확성, 완전성등을확인하여사용자의요구를확정하는단계 산출물 : 요구분석명세서 구조적방법론 vs. 객체지향방법론 3. 설계 (Design) 사용자의요구를소프트웨어시스템의구조로변환하는단계 소프트웨어구조설계, 사용자인터페이스설계, 자료설계, 알고리즘설계 4. 구현 (Implementation) 설계문서를프로그래밍언어를사용하여 source code로변환 구현 4단계 1단계 : 문제의이해, 2단계 : 알고리즘설계, 3단계 : 코딩 (coding), 4단계 : 오류제거 (debugging) 5. 검증 (Verification) 소프트웨어시스템의정확성을검증하는단계 검증방법 : 정확성증명 (correctness proof) 또는테스팅 (testing) 4

객체지향설계 구조적프로그래밍설계와의비교 유사점 분할-정복기법 : 복잡한문제를여러개의단순한부분작업으로나누어각각을개별적으로해결 차이점 : 문제분할방법 구조적프로그래밍은알고리즘적분해 객체지향프로그래밍은객체지향적분해 5

알고리즘적분해와객체지향적분해 알고리즘적분해 ( 함수적분해 ) 고전적프로그래밍기법 소프트웨어를기능적모듈로분해 Pascal의프로시저, FORTRAN의서브프로그램, C의함수 객체지향적분해 응용분야의개체를모델링하는객체의집합 소프트웨어의재사용성조장 변화에유연한소프트웨어시스템 직관적 6

객체지향프로그래밍의기본정의와개념 객체 (object) 계산을수행하고상태를갖는개체 데이타 + 절차적요소 객체지향프로그래밍 (object-oriented programming) 객체는기본적인구성단위 (building block) 각객체는어떤타입 ( 클래스 ) 의인스턴스 (instance) 클래스는상속 (inheritance) 관계로연관됨 객체지향언어 (object-oriented language) 객체지원 모든객체는클래스에속함 상속지원 객체기반언어 (object-based language) 객체와클래스는지원하되상속은지원하지않는언어 (ex. JavaScript) 7

프로그래밍언어의발전과 C++ 의역사 고급프로그래밍언어 1 세대언어 - FORTRAN 수식계산가능 2 세대언어 - Pascal, C 알고리즘을효과적으로표현 3 세대언어 - Modula 추상데이타타입개념도입 4 세대언어 ( 객체지향언어 ) - Smalltalk, Objective-C, C++ 상속기능지원 C 의장점 효율성 (efficient) : 하드웨어를직접제어할수있는기능 유연성 (flexible) : 대부분의응용분야에사용가능 가용성 (available) : 모든컴퓨터에 C 컴파일러존재 8

데이타추상화와캡슐화 데이타캡슐화 (data encapsulation) 정보은닉 (information hiding) 외부로부터데이타객체의자세한구현을은닉 데이타추상화 (data abstraction) 객체의명세 (specification) 와구현 (implementation) 을분리 무엇 (what) 과어떻게 (how) 를명확하게구분 9

데이타타입 데이타타입 (data type) 객체 (object) 들과이객체들에대한연산 (operation) 의집합 C++ 의데이타타입 기본데이타타입 char, int, float, double 등 타입수식어 : short, long, signed, unsigned 파생데이타타입 포인터 (pointer) 타입, 참조 (reference) 타입 데이타를묶어주는구조 배열 (array), 구조 (struct), 클래스 (class) 사용자정의데이타타입 추상데이타타입 (abstract data type; ADT) 객체와연산에대한명세가객체의표현과연산의구현으로부터분리된방식으로구성된데이타타입 10

ADT NaturalNumber is 객체 : 순서가있는정수의일부분으로 0 부터해당컴퓨터의최대정수 (MAXINT) 까지의값 함수 : 모든 x, y NaturalNumber, TRUE, FALSE Boolean +, -, <, ==, = 는일반정수연산자 Zero():NaturalNumber ::= 0 IsZero(x):Boolean ::= if (x == 0) IsZero = TRUE else IsZero = FALSE Add(x,y):NaturalNumber ::= if (x+y <= MAXINT) Add = x+y Equal(x,y):Boolean 자연수 (NaturalNumber) 추상데이터타입 else Add = MAXINT ::= if (x == y) Equal = TRUE else Equal = FALSE Successor(x):NaturalNumber ::= if (x == MAXINT) Successor = x else Successor = x+1 Subtract(x,y):NaturalNumber ::=if (x<y) Subtract = 0 else Subtract = x-y end NaturalNumber

데이타추상화와데이타캡슐화의장점 소프트웨어개발의간소화 복잡한작업을부분작업들로분해 테스트와디버깅 각부분작업을독자적으로테스팅, 디버깅 오른쪽그림에서 (a) 는데이터추상화사용, 흰색부분이버그검사대상부분. 재사용성 자료구조에대한코드와연산을추출해서다른소프트웨어시스템에서도사용 (a) (b) 프로그램코드 A B C 접착코드프로그램코드 데이타타입의표현에대한수정 데이타타입의내부구현에직접접근하는연산들만수정 12

C++ 의기초 C++ 프로그램의구성 헤더파일 선언저장에사용 시스템정의파일 / 사용자정의파일 (.h 접미사포함 ) 전처리기명령 #include를사용하여화일에포함시킴 소스화일.cpp 또는.c 접미사 소스코드저장에사용 프로그램의실행 컴파일 링크 적재 헤더화일중복방지 #ifdef FILENAME_H #define FILENAME_H // 헤더화일내용삽입... #endif 13

C++ 에서의영역 파일영역 함수정의에속하지않은선언, 클래스정의, 네임스페이스 네임스페이스영역 네임스페이스 (namespace) 논리적으로연관된변수나함수를한그룹으로만드는기법 영역정보를사용해서네임스페이스안의개체에접근 예 ) std::cout 지역영역 블록안에서선언된이름 클래스영역 클래스정의에관련된선언 14

C++ 명령문과연산자 C++ 명령문 C 와같은문법과의미 C++ 연산자 new, delete 제외하고 C 의연산자와동일 C++ 의입출력 왼편 / 오른편시프트연산자 (<<, >>) 사용 C 와 C++ 의중요한차이점 연산자다중화 (operator overloading) 허용 15

C++ 데이타선언 데이타선언 : 한데이타타입을어떤이름에연결 상수값 (ex. 5, a, abc, 1.43) 변수 : 데이타타입의인스턴스 상수변수 : 선언시에내용이고정 const int MAX=500; 열거타입 : 일련의정수상수를선언 enum semester{summer, FALL, SPRING}; 포인터 : 객체의메모리주소저장 참조타입 : 객체에대한또다른이름을제공 int i=5; int& j=i; i=7; printf( i=%d, j=%d, i, j); // i=7, j=7 int i=25; int *np; np = &i; int i=25; int *np = &i; 16

C++ 의주석문 복수행주석문 C의주석문과동일 /* */ 단일행주석문 // 17

C++ 에서의입출력 (1) 시스템정의헤더화일 iostream이필요 cout 표준출력장치로출력 << 연산자는 cout 키워드와출력될개체를구분 #include <iostream> using namespace std ; 출력 : n:50 f:20.3 int main() { int n = 50 ; float f = 20.3 ; cout<<"n:"<<n<<endl; cout<<"f:"<<f<<endl; return 0 ; } 18

C++ 에서의입출력 (2) cin 입력을위해사용 >> 연산자는입력될변수들을구분 여백문자로입력값을구분 #include <iostream> using namespace std ; int main() { int a,b; 입력 1: 5 10 <Enter> 입력 2: 5 <Enter> 10 <Enter> cin>>a>>b; } 19

C++ 에서의입출력 (3) C++ 에서의입출력의장점 자유형식 : 포맷기호불필요 입출력연산자도다중화가능 화일입출력 헤더화일 fstream 필요 입력파일 : ifstream class 출력파일 : ofstream class #include <iostream> #include <fstream> using namespace std ; int main() { ofstream outfile("my.out", ios::out); if (!outfile) { cerr << "cannot open my.out" << endl; // 표준오류장치 return; } int n = 50; float f = 20.3; outfile << "n: " << n << endl; outfile << "f: " << f << endl; outfile.close() return 0; } http://se.kumoh.ac.kr/~halee/course/c_ex/ch12/ 20

C++ 의함수 정규함수 멤버함수 : 특정클래스와연관된함수 함수의구성 함수이름 인자리스트 ( 시그너처 ( 입력 )) 반환타입 ( 출력 ) 몸체 ( 함수를구현한코드 ) int getmax(int a, int b) { if (a > b) return a; else return b; } getmax : 함수이름 int a, int b : 인자리스트 int : 반환타입 { 와 } 사이 : 함수몸체 21

C++ 의매개변수전달 값 (value) 에의한전달 전달된객체는그함수의지역저장소에복사 실인자에영향을주지않음 실인자로제공되는변수가함수에의해변경되지않음 참조 (reference) 에의한전달 인자리스트의타입명세자에 & 첨가 전달된객체의주소만함수의지역저장소에복사 실인자에접근 전달된객체가큰메모리를요구하는경우더빨리수행 http://se.kumoh.ac.kr/~halee/course/c_ex/ch04/04-02.cpp 상수참조 (constant reference) 인자변경불가 const T& a 배열은참조로전달 22

C++ 의함수이름다중화 함수다중화 (function overloading) 함수의시그너처 ( 인자리스트 ) 가다르기만하면같은이름을가진함수가둘이상존재할수있음 e.g. int getmax(int, int); int getmax(int, int, int); int getmax(int*, int); int getmax(float, int); int getmax(int, float); 23

인라인함수 함수정의에키워드 inline 을첨가해서선언 함수호출과인자복사의오버헤드를줄임 e.g. inline int getsum(int a, int b) { return a + b; } i = getsum(x,12); 명령문은 i = x+12; 로대체 24

C++ 에서의동적메모리할당 new / delete 연산자 실행시간에자유저장소를할당받거나반환 new 연산자 원하는타입의객체를생성하고그에대한포인터를반환 생성할수없으면예외발생 delete 연산자 new 로생성된객체에게할당된기억장소를반환 e.g. int *ip = new int;.. delete ip; int *jp = new int[10]; //jp 는정수배열.. delete [] jp; 25

예외발생 오류와다른특별한조건이발생했음을알리는데사용 다양한예외각각에대해예외클래스를정의 e.g int DivZero(int a, int b, int c) { if (a <= 0 b <= 0 c <= 0) throw "All parameters should be >0 ; return a + b * c + b / c; } 26

예외처리 try 블록에발생될수있는예외를포함시켜서처리 try 블록뒤에는 0개이상의 catch 블록 각 catch 블록은예외타입을나타내는한인자를가짐 catch (char* e){} catch (bad_alloc e){} catch (...){} http://se.kumoh.ac.kr/~halee/course/c_ex/ch18/ 27