PL - 추상화

esc247·2023년 6월 19일
0

CS

목록 보기
1/5

프로그래밍 언어란?

→ 기계가 읽을 수 있고 사람이 읽을 수 있는 형식으로 계산을 표기하는 표현 체계이다.

  • 무엇을, 어떻게 시킬것인가. → 의사소통 위한 표현법
  • 1940년대 폰 노이만 방식
    • cpu가 처리할 작업을 명령 코드로 작성
    • 어셈블리 언어 탄생 - symbol을 사용
      • 기계 종속적 : 컴퓨터의 종류만큼 어셈블리어가 있다

        → 고급 언어 등장 : 간략, 이해용이, 이식성 증가

      • 이식성 = 다른 기기여도 같은 언어 사용 가능


특징

  • machine-readable
    • Context Free Language
  • human-readable
    • 기계 독립적 추상성 → 자연어 형태
    • 프로그램 커지면서 읽기 어려워져 → 지역성(Locality) 요구

추상화(Abstraction)

  • 필수적인 요소만으로 묘사 → Readability 확보.
  • 나머지는 추상화,은닉,삭제.
  • 자료 - 제어
    • 기본 - 구조 - 단위

자료 추상화

  • 데이터를 추상화한다.
  • 문자열, 숫자 등 계산 될 자료의 특성.
  • 정보의 양에 따른 분류

    기본 추상화 (Basic)

    • 컴퓨터 내부 자료 표현을 추상화 한다.
      - int x, float y (기억 장치의 장소를 x라는 변수로 추상화)
      - x = 5.7 (이진수인 자료의 값을 십진 자료형으로 추상화)

      구조 추상화 (Structured)

    • 관련된 자료의 집합을 추상화
      - 배열, 레코드,struct 등 → 구조 자료형(Structured type) 혹은 구조형이라 부른다
      - 형 선언문(type declaration)으로 구조형에 새로운 형 이름을 부여함으로 새 차원의 추상화 가능.
      - type student = record

      단위 추상화 (Unit)

    • 데이터 정의, 인터페이스, 값을 하나로 캡슐화(Encapsulation)

    • 한 자료형의 생성과 사용에 대한 정보를 한 장소에 모아두고 세부 사항에 대한 접근을 제한 → 자료형 구조에 대한 변경이 프로그램 전체에 영향 X

    • 이를 자료 캡슐화 혹은 추상 자료형.

    • Modula-2 : module, Ada : package, C++/Java: class

제어 추상화

  • 알고리즘 추상화
  • 상황에 따라 실행 순서의 수정을 위한 제어의 특성을 추상화

    기본 추상화 (Basic Abstraction)

    • 몇 개의 기계 명령어를 모아 추상 구문(Abstrat Statement)으로 만든 것

    • 배정문 - x:=x+y

      • 계산과 저장을 추상화
    • Fortran의 GOTO
      - IF (A.GT.B) GOTO 10

      구조적 추상화

    • 검사된 값에 따라 분할된 명령어 그룹 수행.

    • 택일문 - if, case, switch / 반복문 / 부프로그램 호출(Sub-Program Call)

    • 반복 - C/Java -for // Pascal - repeat,while // Ada/Modula-2 - loop_exit

    • 강력한 구조 제어 : 부프로그램 (프로시저 추상화)
      - 이름과 실행 동작 결합 되어야 & 실행될 곳에서 호출되어야한다
      - function, procedure def

      단위 추상화

    • Procedure의 집합을 추상화

    • 프로그래머는 인터페이스, 기능 숙지하고 내부의 구현사항 알 필요 없다

    • Library 형태가 단위 제어 추상화의 결과

    • C++/Java - class, Ada - package, Modula-2 - module

      기타

      병행프로그래밍 (동기회, 통신 개념 지원)

    • Modula-2 -Coroutine, Java - Multithread


계산 전형 Computational Paradigms

명령형(Imperative)/절차형(Procedure) 언어

특징

  • 순차적 실행
  • 메모리 위치 표현하는 변수 사용
  • 변수 값 제어하는 배정문 사용

문제

  • 순차 실행 → 폰 노이만 병목현상
  • 동시 계산, 비결정적 계산, 순서 의존X 계산에 비효율적

  • C, Ada, Pascal, Fortran

함수형(Functional)/적용형(Applicative) 언어

특징

  • 비순차적
  • 함수의 평가(Evaluation),적용(application)으로 Task를 구현해나간다.
  • 변수, 배정문 X
  • 반복문 X → 재귀적 함수(Recursion) 방식 사용

  • Modula-2, Lisp

논리형(Logical)/선언적(Declarative) 언어

특징

  • 비순차적
  • 기호 논리학 근거
  • 순서 기술 대신 무엇을 하려는지 기술.
  • 반복, 선택 개념 필요 X
  • ex) Prolog

객체 지향(Object-Oriented) 언어

특징

  • 객체에 기반
  • 객체 = 기억장소와 이 값을 변경할 수 있는 연산의 집합
  • 객체의 특정 예 = 클래스의 인스턴스
  • 클래스 정의 → 객체 선언
    • GcdLcm g1,g2
      • g1,g2 = 참조형
    • new 연산자와 함께 생성자 명시
      • g1 = new GcdLcm(18,27);

EX)

  • Simula 67(처음 도입), C++, Java
profile
막상 하면 모르니까 일단 하자.

0개의 댓글