Chapter 1 – 프로그래밍 언어 소개 Outline 1.1 프로그래밍 언어란 무엇인가

Slides:



Advertisements
Similar presentations
Doxygen 으로 코드보기 신동진 신수호. 프로젝트 발주 ㅇㅇㅇ NoYea h 프로그래머 1 프로그래머 2.
Advertisements

프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
장. 프로그래밍 언어의 이해 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어.
컴퓨터와 인터넷.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
최윤정 Java 프로그래밍 클래스 상속 최윤정
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Chapter 1 – 프로그래밍 언어 소개 Outline 1.1 프로그래밍 언어란 무엇인가
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 프로그래밍 언어 1-1 C 언어의 개론적 이야기 한글, 엑셀, 게임 등의 프로그램을 만들 때 사용하는 언어 ‘컴퓨터 프로그래머’라는 사람들이 제작 C 언어(C++ 포함)를 가장 많이 사용함.
제 9 장 구조체와 공용체.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
프로그래밍 언어론 2004년 가을학기 창 병 모 숙명여대 컴퓨터과학과.
1장 기본적인 사항(3) 순천향대학교 컴퓨터공학과 하상호.
제9장 추상 데이터 타입 및 모듈 (Abstract Data Type & Module)
제 1장 프로그래밍 언어 소개 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유
프로그래밍 언어 프로그래밍 언어의 개요 프로그래밍 언어의 구문 정의 변수와 영역 자료형 조건문과 반복문 부프로그램
Lesson 9. 예외처리.
C++ Programming: Sample Programs
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
3장 자바의 기본문법(2).
11장. 1차원 배열.
C#.
1장 기본적인 사항(3) 순천향대학교 컴퓨터공학과 하상호.
3. while문 반복문의 종류 while 문 while( 조건식 )        문장;.
Method & library.
JA A V W. 03.
자바 5.0 프로그래밍.
프로그래밍 개요
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
27장. 모듈화 프로그래밍.
Lesson 2. 기본 데이터형.
CHAPTER 04. 프로그래밍 언어 인간과 컴퓨터의 대화_진화하는 소통. 진화하는 컴퓨터
프로그래밍 언어론 - 소개 순천향대학교 컴퓨터공학과 하 상 호.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
04. DBMS 개요 명지대학교 ICT 융합대학 김정호.
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
자바 5.0 프로그래밍.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Chapter 02. 자바 기본 문법.
Part 1 개요 Chapter 1 : 컴퓨터와 프로그램 그리고 자바 Chapter 2 : 자바의 환경
메모리 타입 분석을 통한 안전하고 효율적인 메모리 재사용
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
[ 단원 04 ] 반복과 배열.
데이터 동적 할당 Collection class.
Flow Diagram IV While.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Lecture 04 객체지향 페러다임 Kwang-Man Ko
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
공학도를 위한 C언어 프로그래밍실습1 -통합개발환경 사용법-
멀티미디어시스템 제 5 장. 멀티미디어 데이터베이스 개념 IT응용시스템공학과 김 형 진 교수.
발표자 : 이지연 Programming Systems Lab.
16장. 변수, 연산자, 사용자 정의 함수 변수 배열과 객체 연산자 함수.
Numerical Analysis Programming using NRs
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
.Net FrameWork for Web2.0 한석수
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
왜 ‘프로그래밍’을 ‘비이공계 학생’이 알아야 하는가?
제 4 장 Record.
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
제 1장 프로그래밍 언어 소개 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유
7 생성자 함수.
6 객체.
3장 자바의 기본문법(2).
Presentation transcript:

Chapter 1 – 프로그래밍 언어 소개 Outline 1.1 프로그래밍 언어란 무엇인가 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유 1.3 프로그래밍 언어에서의 추상화 1.4 계산 전형 1.5 언어정의

1. 프로그래밍 언어 소개 의사 소통하는 방식(언어) 생각하는 방법(사고) 프로그래밍 방법 컴퓨터에 대한 생각 영향 의사 소통하는 방식(언어) 생각하는 방법(사고) 프로그래밍 언어 컴퓨터에 대한 이해와 활용 컴퓨터 발전 컴퓨터에 대한 생각 프로그래밍 언어의 변화 프로그래밍 방법 컴퓨터에 대한 생각 프로그래밍 언어

1. 프로그래밍 언어 소개 프로그래밍 언어 변화 요구 프로그래밍 언어 설계 교과 내용 아직도 완벽하게 이해되지 못한 면 존재 기본 법칙이나 개념 : 전산학의 근본 설계에 대한 지식 컴퓨터와 의사 소통, 컴퓨터 이해 교과 내용 특정 언어 중심 아님 언어의 밑바탕을 이루는 일반적인 개념 중심

1.1 프로그래밍 언어란 무엇인가 프로그래밍 언어의 정의 컴퓨터와 의사 소통하기 위한 표현법 (약간 부적절한 면 존재) 1940년대 이전: 프로그래밍이 전선 연결 (프로그래밍 언어 ?) 1940년대 Von Neumann 방식(Program stored computer) CPU가 처리할 작업을 명령 코드로 작성 프로그래밍 개념 시작 어셈블리 언어 탄생 : symbol 사용 기계종속적 저급 수준의 추상화 읽고 쓰기 어려움 고급 수준의 추상화 요구 : 고급 언어 등장 프로그램 간략, 이해 용이, 이식성 증가 배정, 반복, 선택 개념 Z := X + Y LDA X ADD Y STA Z

“ 프로그래밍 언어는 기계가 읽을 수 있고 사람이 읽을 수 1.1 프로그래밍 언어란 무엇인가? 프로그래밍 언어 정의 “ 프로그래밍 언어는 기계가 읽을 수 있고 사람이 읽을 수 있는 형식으로 계산을 기술하는 표현 체계이다.”

1.1 프로그래밍 언어란 무엇인가? 계산 (computation) 이란? 수학적으로 형식적인 정의 가능(튜링 머신등) 컴퓨터가 처리할 수 있는 작업을 의미 (일반적) 기계가 읽을 수 있는 (machine-readable) 효과적인 번역 가능 ( 간결한 구조의 언어 요구) 단순 번역 알고리즘 존재 제한된 시간 내에 번역 가능 (프로그램 크기 단순 비례 이상적 임) 문맥 자유 언어 (context free language) 위 조건들 만족 사람이 읽을 수 있는 (human-readable) 기계 독립적인 추상성 제공 자연어 형태 프로그램 대형화 판독성은 새로운 국면 지역성 요구 프로그래밍 언어 소프트웨어 개발 환경에 포함되는 경향

1.2 프로그래밍 언어를 배워야 하는 이유 프로그래밍 언어 고찰 언어의 특징들(features)에 대한 기본 개념 특징들의 구현과 이 때 발생하는 문제점 특징들의 설계에 대한 기본 개념 실제 언어의 도입 예 : 비교 분석

1.2 프로그래밍 언어를 배워야 하는 이유 프로그래밍 언어를 고찰함으로써 얻는 장점 (1 of 2) 사용하고 있는 언어의 이해와 효율적인 알고리즘 작성 일부 특징 및 특성은 거의 사용 안되며 이해를 못함 이들이 어떻게 수행되고 구현되는지 표현 안 됨 (지침서) 프로그래머 시행 착오에 의존하여 이해 특징들 사용의 효율성과 비효율성 이해 예 : recursion , 동적 기억 장소 할당 (PL/I 등), 병행성 효율적 알고리즘 작성 가능 유용한 프로그래밍 구사 능력 언어 사고 다양한 언어 구조 알고리즘 작성 시 어휘 구사력 증가 어휘를 적재적소 사용 특징 구현 기술 실제 적용 능력 제공 (coroutine 등) 좋은 알고리즘 작성

1.2 프로그래밍 언어를 배워야 하는 이유 프로그래밍 언어를 고찰함으로써 얻는 장점 (2 of 2) 프로그래밍 언어 선택 능력 언어에 대한 다양한 지식 문제 해결에 적절한 언어 선택 예 : 문자 처리에 유용한 Snobol 4, 상업용 Cobol, 시스템 내장 프로그램 Ada, Modula-2 새로운 프로그래밍 언어의 학습 능력 여러 외국어 능통 학자 새 외국어 쉽게 배움 다양한 언어의 특징 이해 새 언어 쉽게 배움 새 언어 : 기존의 여러 특징들의 선택 조합 새로운 프로그래밍 언어 설계 능력 언어 설계 기존의 여러 특징들의 선택 조합 개발 시스템 사용 방법 제공 일종의 언어 제공

1.3 프로그래밍 언어에서의 추상화 추상화 (abstraction) 의 개념 추상화의 범주 주어진 작업이나 객체를 속성들의 일부분을 가지고 필요한 만큼 묘사할 수 있는 방법을 지원하는 것 필수적인 속성만으로 주어진 것을 묘사하므로 나머지 속성들은 추상화,은닉, 또는 삭제됨 추상화의 범주 자료 추상화 문자열, 수, 트리와 같은 계산 될 자료의 특성을 추상화 제어 추상화 (알고리즘 추상화) 실행 순서를 제어하는 특성을 추상화 제어 추상화의 예 : 반복문, 조건문, 프로시저 호출 등

1.3 프로그래밍 언어에서의 추상화 추상화에 포함된 정보의 양에 따른 분류 기본 추상화 (basic abstraction) 가장 지역적인 기계정보에 대한 추상화 구조 추상화 (structured abstraction) 보다 전역적인 정보인 프로그램의 구조에 대한 추상화 단위 추상화 (unit abstraction) 단위 프로그램 전체에 대한 정보의 추상화

1.3 프로그래밍 언어에서의 추상화 자료 추상화 (1 of 2) 기본 추상화 (basic abstraction) 컴퓨터 내부 자료 표현 추상화 예) 기억 장치의 장소 변수로 추상화 int x; float y; 자료의 값 (2진수) 수를 십진 자료형으로 추상화 x = 5.7; 구조 추상화 (structured abstraction) 관련된 자료의 집합을 추상화 전형적인 구조 추상화 예 : 배열, 레코드 (구조형 자료) 구조형에 새 이름 부여 기능(새 차원의 추상화) type student = record …..

1.3 프로그래밍 언어에서의 추상화 자료 추상화 (2 of 2) 단위 추상화 (unit abstraction) 자료의 생성과 사용에 대한 정보를 한 장소에 모아두고, 자료의 세부사항에 대한 접근을 제한하는 도구 자료형의 구조 변경이 프로그램 전체에 영향을 주지 않으며, 자료 구조의 세부사항 무시 함 자료 캡슐화 또는 자료 추상화 (10장) 예 : C++, Java의 class, Modula-2의 module, Ada의 package

1.3 프로그래밍 언어에서의 추상화 제어 추상화 (1 of 5) 기본 추상화 (basic abstraction) 몇 개의 기계 명령어를 모아 이해하기 쉬운 추상 구문화 대표적 예 배정문 : 계산과 값의 저장을 추상화한 것 x := x + y [조건] 분기문 (FORTRAN의 GOTO문이나 IF문 등) IF (A .GT. B) GOTO 10

1.3 프로그래밍 언어에서의 추상화 제어 추상화 (2 of 5) 구조 추상화 (structured abstraction) (검사 값에 따라) 분할된 명령어 그룹 수행 예1 : 택일문 if 문과 같은 택일문, Pascal의 case문, C언어의 switch문 등 예2 : 구조화 반복문 for, repeat, while, loop-exit 예3 : 강력한 구조 제어 : 부프로그램 (프로시저 추상화) procedure def, procedure invocation (새 활성화 환경)

1.3 프로그래밍 언어에서의 추상화 제어 추상화 (3 of 5) 구조 추상화 (structured abstraction) 의 예 - Ada의 if 문 - Java의 if 문 1 if x > y then 2 t := x ; 3 x := y ; 4 y := t ; 5 else 6 x := x + y ; 7 y := y + l ; 8 endif ; 1 if (x > y) { 2 t := x ; 3 x := y ; 4 y := t ; 5 } 6 else { 7 x := x + y ; 8 y := y + l ; 9 }

1.3 프로그래밍 언어에서의 추상화 제어 추상화 (4 of 5) 구조 추상화 (structured abstraction) 의 예 Java와 Ada의 반복문 //Java의 예// 1 i = 0 ; 2 do 3 i = i + 1 ; 4 while (sentence(i) = ‘$’) ; //Ada의 예// 1 i := 0 ; 2 loop 3 i := i + 1 ; 4 exit when sentence(i) /= ‘$’ ; 5 endloop ;

1.3 프로그래밍 언어에서의 추상화 제어 추상화 (5 of 5) 단위 추상화 (unit abstraction) 프로시저의 집합을 추상화 (관련된 프로시저 그룹 추상화) 자료 관리 프로그램에서 평균, 표준편차 등 통계 작업 프로그램들을 모아서 하나의 단위 프로그램화 지원 도구 (library 형태 지원) Ada의 package, Modula-2의 module, C++와 Java의 class 기타 제어 추상화 병행 프로그래밍 (동기화, 통신 개념 지원) : coroutine, task, process 추상화란 : readability 증가 목적

1.4 계산 전형 (computational paradigms) 명령형 언어(imperative L.) 또는 절차적 언어(procedural L.) 특징 명령의 순차적 실행 변수 사용 배정문 사용 문제점 폰 노이만 병목현상 발생(순차 실행) 많은 자료의 동시 계산, 비결정적 계산, 순서에 의존하지 않는 계산 등에 비효율적 대표적 예 : C, Ada, Pascal, Fortran, Basic 등 대부분 언어 비 절차적 언어 : 함수형 언어, 논리형 언어

1.4 계산 전형 (computational paradigms) 함수형 언어(functional L.) 또는 적용형 언어(applicative L.) (1 of 3) 함수의 평가와 함수 적용을 기본으로 함 특징 함수의 평가 및 호출 방법을 제공 변수, 배정문이 없음 반복 연산은 재귀적 함수 이론에 의해 기술됨

1.4 계산 전형 (computational paradigms) 함수형 언어(functional L.) 또는 적용형 언어(applicative L.) (2 of 3) 절차형 프로그래밍과 함수형 프로그래밍 예 (Modula-2) 1 PROCEDURE gcd (u,v : INTERGER; 2 VAR x : INTERGER); 3 VAR y, t : INTERGER 4 BEGIN 5 x := u ; y := v ; 6 LOOP 7 IF y <= 0 THEN 8 EXIT 9 END ; 10 t := y; 11 y := x MOD y; 12 x := t; 13 END; 14 END gcd; 1 PROCEDURE gcd (u,v : INTERGER) : INTEGER ; 2 BEGIN 3 IF v = 0 THEN 4 RETURN u ; 5 ELSE 6 RETURN gcd (v, u MOD v) ; 7 END; 8 END gcd;

1.4 계산 전형 (computational paradigms) 함수형 언어(functional L.) 또는 적용형 언어(applicative L.) (3 of 3) 절차형 언어를 사용한 함수형 프로그래밍 예 함수형 언어를 사용한 함수형 프로그래밍 예 // Modula-2 (최대공약수) 1 PROCEDURE gcd (u,v : INTERGER) : INTEGER ; 2 BEGIN 3 IF v = 0 THEN 4 RETURN u ; 5 ELSE 6 RETURN gcd (v, u MOD v) ; 7 END; 8 END gcd; // Java (최대공약수) 1 int gcd (int u, int v) { 2 if ( v == 0) 3 return u ; 4 else 5 return gcd (v, u % v) ; 6 } 1 define (gcd u v) (if ( = v 0) u (gcd v (remainder u v ))))

1.4 계산 전형 (computational paradigms) 논리형 언어 (logical L.) 혹은 선언적 언어 (declarative L.) 특징 기호 논리학에 근거 계산의 실행 순서(how) 대신 무엇을 하려고 하는가(what)를 선언 반복이나 선택 개념 불필요 최대 공약수 (gcd) 에 대한 논리적 기술 v = 0 이면 u 와 v 의 gcd 는 u 이다. v > 0 이면 u 와 v 의 gcd 는 v 와 u mod v 의 gcd 와 같다. 논리적 기술에 대한 Prolog 프로그램 1 gcd(U,V,U) :- V=0. 2 gcd(U,V,X) :- V>0, 3 Y is U mod V, 4 gcd(V,Y,X).

1.4 계산 전형 (computational paradigms) 객체 지향 언어 (object-oriented L.) 객체에 기반을 둔 언어 객체란 상태를 의미하는 기억 장소와 상태를 변경할 수 있는 연산의 집합 객체는 클래스로 그룹화 클래스 선언 C나 Pascal에서 구조형 자료를 선언하는 방법과 유사 클래스의 인스턴스 선언된 객체의 실제 예 객체 지향의 방법을 처음 소개한 언어 : Simula 67

GcdLcm 클래스 사용 예 GcdLcm 클래스의 객체 g1, g2 정의 1 // 객체 지향 언어 (object oriented L.) 예 2 // Java로 작성된 최대공약수 선언부 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Main { // 클래스 GcdLcm 테스트 프로그램 20 public static void main (String[] args) { 21 GcdLcm g1, g2 = new GcdLcm (1000, 100) ; 22 g1 = new GcdLcm (18, 27) ; 23 System.out.println (“g1.gcd :” + g1.gcd + “g1.lcm :” + g1.lcm) ; 24 System.out.println (“g2.gcd :” + g2.gcd + “g2.lcm :” + g2.lcm) ; 25 } 26 } class GcdLcm { // 클래스 GcdLcm 선언 public int gcd, lcm ; int x, y ; GcdLcm (int num1, int num2) { x = num1 ; y = num2; gcd = gcdf (x, y) ; lcm = x * y / gcd ; } int gcdf (int a, int b) { if (b == 0) return a; else return gcdf (b, a % b) ; GcdLcm 클래스 사용 예 GcdLcm 클래스의 객체 g1, g2 정의 GcdLcm g1, g2 ; g1의 기억 장소 할당 g1 = new GcdLcm (18, 27) ; g1이 갖는 값을 참조 a = g1.gcd ; b = g1.lcm;

1.5 언어 정의 프로그래밍 언어의 정확한 형식 정의가 필요한 이유 언어의 구조와 의미의 정확한 기술 없이는 프로그래밍이 불가능 모호함 없는 언어 구현 프로그래밍 과정에서 프로그램이 어떻게 동작할 것인가에 대한 문제 발생 시 유용 프로그램 설계 과정을 규격화하는 방법

1.5 언어 정의 언어 정의의 범주 형식 정의에는 구문(syntax) 정의와 의미(semantic) 정의가 있음 언어 구문 정의 언어 구문에 관한 정의는 형식화가 많이 되어 있음 대부분의 언어가 문맥 자유 문법을 만족하며 BNF로 정의 예 : Pascal의 if 문 <if 문> ::= if <조건> then <문> [ else <문> ] 언어 의미 정의 의미는 프로그램의 실행 시 어떤 일이 발생하는가를 기술 예 : if 문에서 조건문이 거짓으로 판명 되었을 때, else 문 이하가 존재하지 않을 경우 언어 의미론은 형식화 미비 의미론의 형식적 정의 방법 : 디노테이셔녈 (denotational) 의미론, 액시어매틱 (axiomatic) 의미론