interface를 사용한 종속성 최소화

Posted 2012. 12. 27. 14:29

자신의 기능을 노출 시키자

1. 하나의 인터페이스는 서비스를 제공하는 하나 이상의 메소드를 정의

2. COM 개체는 반드시 하나의 IUnknown 인터페이스를 제공

3. COM 개체의 고유한 기능을 노출하는 하나 이상의 인터페이스 제공

4. 순수가상함수만을 멤버로 포함하는 추상클래스의 모임

5. 인터페이스를 상속받은 인터페이스의 가상함수는 반드시 전부 재정의 해야 한다.

 

#include <iostream>

 

class ICall

{

public:

virtual ~ICall(){};

virtual void call () = 0;

};

 

class callme : pulic ICall

{

public:

~callme(){};

void call(){ std::cout << " call me " << std::endl; };

};

 

class user

{

public:

void what( ICall* ic ){ ic->call(); };

};

 

void main()

{

callme* c = new callme;

user u;

u.whet(c);

}

이렇게 되면 .h파일을 include해 줘야 하며 컴파일도 새로 해야 하며 종속적이게 된다.

 

마소의 COM/DCOM 에서는 아래와 같이 구현 함으로 include 및 컴파일 속도 종속성을 해결해 줄수있다

 

interface ICall                        // call에 대한 interface 생성

{

virtual ~ICall(){};

virtual void call() = 0;

};

 

class callme : public ICall

{

public:

~callme(){};

void call(){ std::cout << "call me" << std::endl; };

};

 

class user

{

public:

void what( ICall* ic ) { ic->call(); };

};

 

void main()

{

callme* c = new callme;

user u;

u.what(c);

}

 

//---------------------------------------

인터페이스와 추상클래스의 차이점

추상 클래스( abstract class )

1.추상 클래스가 되려면 추상 메소드가 1개 이상인 클래스(단, 추상 field는 없다)

-> ( void make() )

2. 추상 클래스를 상속했지만 추상 메소드를 오버라이딩 하지 않거나 인터페이스를 구현했지만

메소드를 구현하지 않았을때

3. 특정 메소드를 강제로 상속하여 사용하려는 경우

4. 특징

1. 자기자신의 이름으로 자기자신을 생성 할 수 없다.

2. 추상 클래스를 상속한 자식 클래스의 객체를 생성하여 사용한다.

3. 선언과 구현을 분리 시킨다.

4. 부모는 자식보다 추상적 또는 일반적이다.

5. 부모의 메소드를 자식의 특징에 맞게 오버라이딩 한다.

 

인터페이스( interface )

1. 인터페이스가 되려면 abstract method로만 이루어진 클래스

2. void show();와 같이 바디( {} ) 를 붙이지 않는다.

   메소드 이름을 나열한다.

3. private은 사용하지 말고 기본 접근 제한자 이상을 사용하자.

   void show(); 는 public abstract void show(); 가 된다. 그래서 추상 메소드라 불린다.

4. 변수는 자동으로 상수가 된다.

-> int a = 1; ==> public final static int a = 1;

5. 인터페이스의 추상 메소드를 구현하지 못하면 자식 클래스는 추상클래스가 된다.

6. 인터페이스가 여러개일때 ","을 사용 한다.

-> A implements IC, ID

7. 상속이 우선이다

-> A extends B implements IC, ID

8. 인터페이스는 여러개의 인터페이스를 상속 할 수 있다.

-> ex IA extends IC, ID

9. 자기 자신의 이름으로 자기자신을 생성 할 수 없다.

10. 커플링을 떨어뜨린다.

11. 선언과 구현을 분리 시킨다.

12. 다중상속을 흉내낸다.

 

 

 

 

'C++' 카테고리의 다른 글

깊은복사 얕은 복사  (0) 2012.09.04
스마트 포인터  (0) 2012.09.04

이런게 좋다능

Posted 2012. 12. 27. 14:10

2번 이상 들어가는 if ~else는 switch를 사용 하거나 함수로 분리

 

 

C++의 factory 개념으로 상속을 이용한 클래스를 만드는 방법을 활용

 

 

클래스간 종속성 최소화

A -> B -> C 사용 할 경우 각 클래스는 자기가 직접 다루는 클래스만 알아야 한다

ex) A는 B, B는 C

A가 C를 직접 접근 할 경우가 있다면 B에 위임함수를 만들어 해결한다.

COM의 이벤트 소스 방식( 종속성을 최소화 interface 추가 )

 

 

오류 조건을 먼저 검사하여 가독성이 떨어지지 않도록 하자

if( abc == NUL ) return;

 

 

실용의 프로그래머

동일한 코드를 공용 루틴(함수)로 개발. 2~3줄 짜리 복잡한 if 문도 bool을 리턴 하는 함수로 개발하는 것이 리팩토링도 좋다.

 

절차, 객체

Posted 2012. 10. 31. 18:45

절차지향.

C언어가 대표적. 절차적으로 프래그래밍 되는 방식.

함수 위주의 구조화된 방식.

처음 시작되는 main() 함수에서 출발하여 그 안의 내용을 순차적으로 실행하는 방식

main()함수는 대부분 또 다른 함수를 호출하는 방식으로 되어 있다.

main() 함수 안의 함수들은 순차적으로 호출되며 작업을 수행한다.

함수들을 중심으로 프로그램을 설계 한 후 거기에 필요한 데이터를 정의 한다.

 

 

객체 지향( OOP : Object Oriented Programming )

C++, java, asp, Visual basic, C#등.

프로그램이 순차적으로 일어나지 않는다.

객체들로 이루어진 프로그램에서 이벤트가 일어나면 그 이벤트를 처리하는 방식.

객체는 구조체처럼 멤버변수를 가지고 있으면서 그들을 수행하는 함수들을 가지고 있다.

이러한 함수를 메소드라하며 메소드는 객체를 사용하기 위해 필요한 모든 이벤트들을

처리하는 함수다.

 

 

« PREV : 1 : ··· : 32 : 33 : 34 : 35 : 36 : 37 : 38 : ··· : 77 : NEXT »