공부/객체지향2011. 6. 28. 13:14


추상클래스
실제 구현 클래스를 위한 저장장소
추상클래스는 기능을 정의하고 서브클래스는 기능을 구현한다.

클래스의 공통적인 요소를 묶기 위해 추상클래스를 사용할 수 있다.

UML
1. Aggregation(집합) - 연관(Association)의 특별한 형태, 어떤 것이 다른 것으로 구성되어 있음을 의미.
출처 : byteonic.com

2. association(연관)
출처 : mscs.mu.edu

3. generalization(일반화)
출처 : jot.fm


객체지향의 원리

1. 인터페이스
클래스 FootballPlayer, BaseballPlayer가 인터페이스 Athlete를 상속할 때 이들 클래스와 상호작용하는 코드를 만들때 FootballPlayer, BaseballPlayer와 직접 상호작용하는 것 보다는 Athlete 인터페이스와 상호작용하는 것이 좋다. 항상 구현이 아니라 인터페이스에 따라 코딩하도록 해야 한다.
이게 왜 중요하냐면 프로그램이 유연해지기 때문이다. 인터페이스와 상호작용하는 코드를 만들면 새로운 클래스 예를 들면BasketballPlayer와도 잘 동작하게 될 것이다.

2. 캡슐화
클래스를 불필요한 변경으로부터 보호한다.
변경하는 것을 캡슐화 한다. 즉, 변화의 가능성이 낮다고 생각하는 부분과 많다고 생각하는 부분을 따로 때어낸다.

3. 변경
소프트웨어는 변하기 때문에 좋은 소프트웨어는 쉽게 변경될 수 있어야 한다. 변경에 잘 견딜 수 있는 프로그램을 만들 수 있는 방법 중 하나는 각 클래스가 변경의 이유를 하나만 갖도록 하는 것이다. 즉, 각 클래스가 하나의 일만을 하도록 해야 한다.

디자인의 오류 발견하기
디자인은 반복적으로 진행되며, 남의 디자인뿐만아니라 자신의 디자인도 기꺼이 변경해야 한다.
자존심은 좋은 디자인에 방해된다.

변하는 것을 볼 때마다, 캡슐화할 방법을 찾아야 함.
객체들 사이에 변하는 속성들이 있을 때, map 같은 콜렉션을 사용하서 속성들을 동적으로 저장하기. 그래서 새로운 속성들이 추가되어도 메소드를 추가하거나 코드를 변경할 필요가 없다.

보통 행동이 변할 때 서브클래스를 사용한다.

대부분의 좋은디자인은 나쁜디자인의 분석을 통해 나온다.
실수하는 것과 변경하는 것을 두려워하지 말기.

응집도
 

응집도는 하나의 클래스를 이루는 원소들 사이에 연결의 정도.
응집도가 높은 클래스는 특정한 일에 집중하고 그 외의 일은 하려고 하지 않는다.
모든 클래스는 하나의 일을 위해 존재해야 한다.
응집도가 높을 수록 클래스끼리는 더 느슨해 진다. 즉 변경이 쉬워진다.
변경뿐만 아니라 재사용도 쉽다. 객체들이 서로 의존하지 않기 때문에. 

'공부 > 객체지향' 카테고리의 다른 글

7장 아키텍쳐 (architecture)  (0) 2011.06.30
6장 큰문제 해결하기  (0) 2011.06.29
4장 분석  (0) 2011.06.26
3 요구사항 변경  (0) 2011.06.25
2장 요구사항 수집 (유스케이스)  (0) 2011.06.24


Posted by skyjumps
공부/선형대수2011. 6. 26. 23:16


Block multiplication
묶어서 곱하는 경우. 묶은 걸 요소하나로 보면 요소 하나 일때 곱셈이랑 같다. 자세한건 위키 참고.

출처 : 위키피디아 

Block matrix multiplication

A block partitioned matrix product can be formed involving operations only on the submatrices. Given an (m \times p) matrix \mathbf{A} with q row partitions and s column partitions


\mathbf{A} = \begin{bmatrix}
\mathbf{A}_{11} & \mathbf{A}_{12} & \cdots &\mathbf{A}_{1s}\\
\mathbf{A}_{21} & \mathbf{A}_{22} & \cdots &\mathbf{A}_{2s}\\
\vdots          & \vdots          & \ddots &\vdots \\
\mathbf{A}_{q1} & \mathbf{A}_{q2} & \cdots &\mathbf{A}_{qs}\end{bmatrix}

and a (p\times n) matrix \mathbf{B} with s row partitions and r column partitions


\mathbf{B} = \begin{bmatrix}
\mathbf{B}_{11} & \mathbf{B}_{12} & \cdots &\mathbf{B}_{1r}\\
\mathbf{B}_{21} & \mathbf{B}_{22} & \cdots &\mathbf{B}_{2r}\\
\vdots          & \vdots          & \ddots &\vdots \\
\mathbf{B}_{s1} & \mathbf{B}_{s2} & \cdots &\mathbf{B}_{sr}\end{bmatrix},

the matrix product


\mathbf{C}=\mathbf{A}\mathbf{B}

can be formed blockwise, yielding \mathbf{C} as an (m\times n) matrix with q row partitions and r column partitions. The matrices in your matrix \mathbf{C} are calculated by multiplying while you multiply:


\mathbf{C}_{\alpha \beta} = \sum^s_{\gamma=1}\mathbf{A}_{\alpha \gamma}\mathbf{B}_{\gamma \beta}.

 
Inverse = non singular
No Inverse = singular

즉, 역행렬을 가지면 정상이고 못가지면 이상한거란다. 무슨 기준이지?ㅋㅋ
아무튼 역행렬을 못가지는 행렬이 있다.
어떨때 못가질까? 첫번째는 고딩때 배웠던 determinant를 이용하는 것. 2x2일 때 ad-bc = 0 이면 역행렬이 없다.
두번째는 A 가 (a11, a12, a21, a22)가 (1,3,2,6)이라고 하자. determinant로는 0이 나오므로 역행렬을 못가진다. 진짜 그럴까?
얘가 역행렬을 가진다고 치자. 그러면 Ax = I 인 x가 있을 것이다. 자, column 벡터를 생각해보자. (1,3)이랑 (2,6) 벡터로 (1,0)이나 (0,1)을 표현할 수 있나? 없다. 따라서 A는 역행렬이 없다. column 벡터를 보면 역행렬을 왜 가질 수 없는지 알 수 있다.
마지막 세번째는 Ax = 0 에서 0이 아닌 vector x가 있으면 A는 역행렬을 못가진다. 이유는 뭘까? A의 역행렬을 가진다고 쳐보자. 그럼 Ax = 0 에서 양변에 A^-1 해주면 x = 0이다. 0이 아닌 벡터 x가 있다고 했는데 0이 나와버렸으니 모순이다.

The Gauss-Jordan Method
역행렬을 구하는 방법이다.
가우스 조단 방법을 모른다고 하고 2x2 역행렬을 구한다고 하면
AA^-1 = I 여기서 A^-1을 (a,b,c,d)로 놓고 A에서 A^-1의 각 컬럼을 곱하면 
식이 두개가 나온다. 하나는 결과가 (1,0) ,나머지는 (0,1)인 행렬식 두개. 두 식으로부터 역행렬을 구할 수 있다.
여기서 가우스 조단 방법은 두 식을 한번에 계산해버리는 거다.
일반화하면 가우스 조단 방법은 nxn 역행렬을 구할 때 n개 식을 한번에 하는 것임.
가우스 조단 방법을 적용하면 [A I] 가 [I A^-1]로 변하고 따라서 A^-1를 구할 수 있다. 즉, A를 I로 만들어주면 I는 A^-1가 된다. 그런데 왜 I가 A의 역행렬이 될까?
E[A I] -> [I ??]
A에 E를 곱하여 I가 되었다. 따라서 E는 A의 역행렬이다. '??'는 E에 I를 곱한 값이고 E x I = E다. 따라서 '??'는 A의 역행렬.
여기서 앞에서 배웠던 블럭 곱하기가 사용된 걸 체크! [A I]는 A와 I로 파티션이 나누어져 있다.

'공부 > 선형대수' 카테고리의 다른 글

Elimination with Matrices  (1) 2011.06.24
1장 Matrices and Gaussian Elimination (1)  (0) 2011.06.22


Posted by skyjumps
공부/객체지향2011. 6. 26. 21:18


분석을 통해서 시스템이 실세계에서 잘 동작하도록.
시스템에서 문제를 찾고 해결방안을 찾는다.
유스케이스는 고객, 관리자, 동료개발자들에게 시스템을 설명하는데 쓰인다. 그래서 쉬운방식으로 작성되어야 하고
이런 유스케이스들과 분석을 통해서 실세계에서 어떻게 동작하는지 그들에게 보여준다.
분석을 통해서 문제를 발견하면 유스케이스에서 필요한 부분을 수정한다.

다시한번 위임 설명.
위임을 통해 프로그램을 느슨하게 결합시킬 수 있다. 객체들이 독립적으로 동작함을 의미. 객체의 변화가 다른 객체들에게 영향을 미치지 않도록 해준다.
 
분석을 통해 유스케이스를 잘 만든 다음 본문 분석을 통해 무엇을 클래스로 할 것인지에 대해 대략적인 방향을 잡는다. 본문 분석할 때 명사들은 대개 클래스이고 동사는 객체의 메소드이다. 대개 시스템 외부에 있는 명사들은 클래스가 되지 않는다.

클래스다이어그램
연관 - 한 클래스가 다른 클래스와 참조, 확장, 상속 등에 의해 연관되어 있음을 의미. 연관에 이용되는 속성은 목적클래스쪽 화살표위에 표시하며 클래스다이어그램에서 클래서 속성 넣는 곳에는 표시 안한다.
다중도 - 속성이 목적클래스 객체를 몇개까지 가질 수 있는지. '*' 라고 표시하면 무제한

클래스다이어그램는 시스템의 개요을 다른 프로그래머들에게 보여주기 위한 것이다. 타입정보를 정확히 알려주지 않고 메소드를 어떻게 작성해야하는지도 알려주지 않는다. 시스템의 전체 그림을 한눈에 보여준다. 

'공부 > 객체지향' 카테고리의 다른 글

6장 큰문제 해결하기  (0) 2011.06.29
5장 좋은디자인 = 유연한 소프트웨어  (0) 2011.06.28
3 요구사항 변경  (0) 2011.06.25
2장 요구사항 수집 (유스케이스)  (0) 2011.06.24
1장  (0) 2011.06.23


Posted by skyjumps
공부/논리설계2011. 6. 26. 01:28


카르노맵 - Boolean function을 최소화 하기 위해 사용하는 방식
카르노맵 만드는 법
http://blog.naver.com/PostView.nhn?blogId=nsesibong&logNo=60028521258&viewDate=&currentPage=1&listtype=0

카르노맵 특징
2의 지수승으로 묶는다.
묶는 방법에 따라 식이 여러개 나온다.
서로 인접하도록 만든다. ( 00, 01, 10, 11 이런식으로 비트가 하나만 바뀌도록)
항이 4개일때는 칸이 16X16인 맵이 2개 나온다. 두개를 따로 묶는 것으로 끝나지 않고 두 개가 겹쳤을 때 인접한지도 고려한다.

카르노맵을 Sum of product 방식으로 나타내었는데
product of sum의 방식으로 나타내려면 맵에서 0인 것을 묶으면 F'이 구해지고 이것을 complement를 해준다.

Don't care conditions
0이 되던지 1이 되던지 상관없는 minterms. 예를 들면 4bit binary code에서 0에서 9까지 표현하려고 하면 16개 중에서 6개는 필요가 없다. 얘네들을 이용해서 boolean function을 더 최소화할 수 있다. 1이라고 생각해도 되고 0이라고 생각해도 된다. 어차피 얘네들 output은 안쓰이니까 말이다. 최소화할 때 박스 더 크게 만들 수 있도록 도와준다.

AND, OR 회로는 NAND, NOR 회로로 바꿀 수 있다.
실제로 NAND와 NOR로 전기 컴포넌트를 더 만들기 쉽고, IC digital logic families의 basic gate이다.

NAND-AND 회로는 AND-NOR 회로로 서로 바꿀 수 있고
NOR-OR 회로는 OR-NAND 회로로 서로 바꿀 수 있다.

Exclusive-or function
Odd function이다. 즉, 1인 항이 홀수개이면 함수값이 1이다.
카르노맵을 그려보면 1의 갯수가 홀수개인 minterms만 1이 됨을 볼 수 있다.
이런 성질은 에러체크에 쓰인다. 전송중에 데이터가 손상되었다던지 해서 에러가 발생했을 경우 전송 전 패리티비트(1의 갯수가 홀수냐 짝수냐에 따라 값이 달라지는비트, 홀수패리티비트일때는 1의 갯수가 홀수일 때 1이다.)가 전송 후 패리티비트와 같은지 비교를 통해 에러의 발생여부를 알 수 있다. 
 

'공부 > 논리설계' 카테고리의 다른 글

4장 Combinational Logic  (0) 2011.06.28
2장 Boolean Algebra and Logic gate  (0) 2011.06.24
1장 Binary Systems  (0) 2011.06.22


Posted by skyjumps
공부/운영체제2011. 6. 25. 18:50


인터럽트
대부분의 운영체제는 인터럽트 방식이다.
하드웨어, 소프트웨어 모두 인터럽트를 발생시킬 수 있다.
인터럽트 진행과정
현재 일을 멈추고 리턴 주소와 프로세서 상태를 시스템 스택에 저장한다.
인터럽트 벡터(모든 서비스의 처리 루틴의 주소들을 포함하는 것)를 참조하여 특정 인터럽트를 처리한다.
인터럽트가 작업중일때는 다른 인터럽트는 끼어들지 못하도록 한다.
작업이 완료되면 이전에 하던 일로 돌아간다.

Synchronous I/O
I/O 작업이 끝날동안 프로세스는 기다려야 함.

Asynchronous I/O 
I/O 작업이 끝나길 기다릴 필요 없이 프로세스가 처리될 수 있다.

Caching
최근 접근한 데이터를 저장하기 위해 빠른 메모리 사용
용량이 작기 때문에 관리정책이 필요.

Dual-mode, I/O protection, Memory protection, CPU protection
프로세스들이 시스템 자원을 공유하기 때문에 서로의 프로세스를 침범하는 문제가 발생할 수 있다.

Dual mode는 user mode와 kernel mode인데 사용자 프로세스가 커널에 침범하지 못하도록 user mode와 kernel 모드로 나눈 것이다. 즉 user 프로그램은 user mode에서 동작하고 커널 모드에 접근할 수 없다. 시스템콜을 호출한다거나 0으로 나눴을 때(예외가 발생하는 경우) 커널 모드로 동작이 된다.
또한 사용자 프로그램이 I/O에 마음대로 접근하지 못하게 한다. 커널을 통해서 접근하도록 한다. (I/O protection)
또한 각각의 프로그램마다 영역을 정해줘서 다른 영역으로 침범 못하도록 한다. (Memory protection)
또한 한 프로그램이 CPU를 독점하는 것을 막기위해 타이머 인터럽트를 발생시키는 등 스케쥴링을 통해 CPU를 관리한다. (CPU protection)

참고 사이트
http://nenunena.tistory.com/41

운영체제 구조
1. 프로세스 관리
프로세스는 실행중인 프로그램이다. 운영체제는 프로세스 생성과 삭제, 중단과 재개, 프로세스 간 동기화나 통신을 맡는다.
2. 메인메모리 관리
3. 파일 관리
4. I/O 시스템 관리
5. 디스크 같은 이차 스토리지 관리
6. 분산시스템일 경우 네트워킹

'공부 > 운영체제' 카테고리의 다른 글

6장 Synchronization  (0) 2011.07.04
Process scheduling  (0) 2011.07.03
Multithreaded Programming  (0) 2011.06.30
Process Concept  (0) 2011.06.28
1장 Introduction  (0) 2011.06.24


Posted by skyjumps
공부/객체지향2011. 6. 25. 13:17


요구사항은 항상 변한다.

시나리오 : 유스케이스의 시작부터 끝의 경로. 유스케이스에는 몇 개의 다른 시나리오가 있고 주경로, 대체경로로 표시한다. 대체경로는 가끔만 일어나는 단계일수도 있고, 부분적으로 완전히 다른 경로를 제공할 수도 있다.
각 시나리오는 같은 목표를 가지고 있다.
 

'공부 > 객체지향' 카테고리의 다른 글

5장 좋은디자인 = 유연한 소프트웨어  (0) 2011.06.28
4장 분석  (0) 2011.06.26
2장 요구사항 수집 (유스케이스)  (0) 2011.06.24
1장  (0) 2011.06.23
UML, 상속, 다형성, 캡슐화  (0) 2011.06.22


Posted by skyjumps
공부/운영체제2011. 6. 24. 22:14


Spooling
 

입력장치가 CPU보다 처리속도가 엄청 느리기 때문에 속도를 보완하기 위해 나온 방식
입출력장치가 보조기억장치에 미리 처리할 내용을 저장해서 프로세스는 입출력장치를 거치지 않고 보조기억장치로부터 읽어서 처리한다.
Spooling은 여러작업을 처리할 수 있다. 예를 들어 한 작업이 출력되는 동안 다른 작업을 불러들일 수 있다.

비교 > Buffering 
Buffering도 CPU와 입출력장치의 속도차이를 보완하기 위한 방법인데 Spooling과 달리 주기억장치에 저장한다.

Multi-programming and Multi-tasking

주기억장치에 여러 프로그램들이 올라가 있고 운영체제가 실행할 프로그램을 선택한다.

von Neumann Architecture

프로그램 메모리와 데이터 메모리가 구분되어 있지 않음 (Harvard Architecture는 메모리가 구분되어 있음)

I/O device controller

I/O device는 컨트롤러를 가지고 있고 CPU는 이 컨트롤러와 정보를 주고 받는다.

운영체제란?

사용자와 하드웨어 중간에서 매개역활을 하는 프로그램

운영체제가 하는 일
 

1) Hardware abstraction
- 프로그래머가 하드웨어의 구체적인 부분을 몰라도 하드웨어에 접근할 수 있도록 한다.
2) Illusion
- time sharing으로 프로세서가 무한한 것처럼
- virtual memory를 이용하여 메모리가 무한한 것처럼
3) Protection
- time-shared scheduling으로 CPU protection
- physical memory와 virtual memory를 분리함으로써 memory protection
- dual mode(User/System)을 사용함으로써 I/O protection

'공부 > 운영체제' 카테고리의 다른 글

6장 Synchronization  (0) 2011.07.04
Process scheduling  (0) 2011.07.03
Multithreaded Programming  (0) 2011.06.30
Process Concept  (0) 2011.06.28
2장 System Structures  (0) 2011.06.25


Posted by skyjumps
공부/알고리즘2011. 6. 24. 21:13


O-notation
Upper bound. 이보다 커질 수 없다.

Ω-notation
lower bound. 이보다 작아질 수 없다.

Θ-notation
tight bound. upper bound도 될 수 있고 lower bound도 될 수 있다.




ο-notation (small O notation)
tight 하지 않은 upper bound

ω-notation (small Ω notation)
tight 하지 않은 lower bound

함수의 비교
 

Θ,Ω,ο,ω 를 관계로 보면
Transitivity
aRb and bRc -> aRc

Reflexivity
aRa

Symmetry
aRb -> bRa

Transpose symmetry 
aRb -> bR'a

'공부 > 알고리즘' 카테고리의 다른 글

8장 Sorting in Linear Time  (0) 2011.07.03
7장 Quicksort  (0) 2011.07.03
Heapsort  (1) 2011.06.30
4 Recursion  (0) 2011.06.28
2장 insertion sort, merge sort, binary search, selection sort, bubble sort  (1) 2011.06.23


Posted by skyjumps
공부/논리설계2011. 6. 24. 19:01


Duality
Boolean Algebra의 중요한 속성.
하나를 보여주면 다른 하나도 보여줄 수 있다.
예를 들면 헌팅턴의 공준, 공리에서  x+y = y+x 임을 보이면 x*y = y*x도 성립한다.
즉 binary operators( +, * )나 identity elements(+일 때는 0, *일 때 1)을 바꿈으로써 하나가 성립하면 다른 하나도 성립한다.

Boolean function
Ex) F1 = x + y'z
Truth tables로 값을 찾을 수 있다.
Logic gate로 구현할 수 있다.

Complement of Function.
F'은 F의 값이 0인 경우가 1이다.
드모르간 (DeMorgan) 법칙을 이용해 구할 수 있다.
또는 dual을 구하고 각 문자에 complement를 하면 된다.

Minterms and Maxterms

그림에서 보면 minterms 와 maxterms는 complement 관계에 있다.

Truth table로 부터 함수의 min terms를 구할 수 있다.
그리고 함수 F의 함수값이 0이 되는 부분을 이용하여 F'의 min terms도 구할 수 있고
이 함수를 다시 complement하면 본래의 F로 돌아가지만 max terms으로 표현된다.
따라서 min term을 알면 max terms도 안다. (complement 관계!)

Boolean expressions
52쪽 참고

Digital logic gate
54쪽 참고
 

'공부 > 논리설계' 카테고리의 다른 글

4장 Combinational Logic  (0) 2011.06.28
3장 Gate-Level Minimization  (0) 2011.06.26
1장 Binary Systems  (0) 2011.06.22


Posted by skyjumps
공부/객체지향2011. 6. 24. 18:30


소프트웨어는 고객이 원하는 기능을 하도록 해야 한다.
 

그러기 위해서 요구사항을 수집한다.
요구사항 : 시스템이 올바르게 동작하기 위해 수행하는 특정한 하나의 일.
요구사항을 잘 얻기 위해서는 시스템이 무엇을 해야 하는지 이해해야 한다.
예상밖의 상황도 생각해서 이를 어떻게 처리할지 생각해야 한다.
 
유스케이스
 

고객의 특정한 목표를 달성하기 위해 시스템이 무엇을 하는지 기술한다.
하나의 유스케이스에는 하나의 목표에만 집중한다.
따라서 목표 하나에 유스케이스 하나씩 있다.
유스케이스는 시스템이 '무엇'인지에 대한 것이다. 따라서 '어떻게' 구현할지는 생각하지 않음.
시스템의 외부에 고객이나 외부의 어떤 것이 존재한다.

유스케이스는 3가지가 필요하다.
1. 이 유스케이스가 고객의 목표달성에 도움이 되어야 한다.
2. 시작과 종료 지점이 있다. 
3. Actor가 있다. 주로 사람이나 시스템 외부의 어떤 것. 주로 시작 지점을 담당한다.

유스케이스는 프로그램의 주경로 이외에도 대체 경로에 대해서도 잘 동작하도록 해야 한다.

'공부 > 객체지향' 카테고리의 다른 글

5장 좋은디자인 = 유연한 소프트웨어  (0) 2011.06.28
4장 분석  (0) 2011.06.26
3 요구사항 변경  (0) 2011.06.25
1장  (0) 2011.06.23
UML, 상속, 다형성, 캡슐화  (0) 2011.06.22


Posted by skyjumps