C에 대한 설계 원리, 모범 사례 및 설계 패턴(또는 일반적으로 절차 프로그래밍)?
C 프로젝트를 설계할 때 따를 수 있는 알려진 설계 원리, 모범 사례 및 설계 패턴이 있는가?또는 절차적(불복적) 프로그래밍을 위한 유용한 설계 원칙?
(나는 '객체 지향 세대'의 아이로, 처음으로 대규모 C 프로젝트를 설계해야 한다)
정보 숨기기 - Parnas(소프트웨어 기본 원리)가 지지하는 바와 같이.
머리글 및 가시성 주의 관리:
- 외부 세계로부터 숨길 수 있는 소스 파일의 모든 것은 문서화된 외부 인터페이스만 노출되어야 한다.
- 노출된 모든 것은 헤더로 선언된다.
- 이 헤더는 기능이 필요한 곳(및 기능이 정의된 곳)에 사용된다.
- 헤더는 자급자족하며 필요할 때 사용하고, 헤더가 작동하도록 하는 데 필요한 모든 것을 포함시켜 작동하도록 하기 때문에 '다른 헤더도 포함시켜야 하는 것'에 대해 걱정할 필요가 없다.
헤더는 자체 보호되므로 여러 번 포함해도 상관없다.
#ifndef HEADER_H_INCLUDED #define HEADER_H_INCLUDED ...rest of header contents, including other #include lines if necessary #endif /* HEADER_H_INCLUDED */
'객체'(일반적으로 구조)에서 작업할 수 있는 기능 집합 설계 - 이를 사용하는 코드에서 구조의 내장을 샅샅이 뒤지는 대신 그러한 기능을 사용한다.스스로 정한 캡슐화라고 생각해라.
나의 세가지 조언:
- 쓰기 단위 테스트를 수행하십시오.그들은 당신이 진행하면서 당신의 문제에 맞는 디자인을 할 수 있도록 도와줄 것이다.미리 계획한 생각에 의존하는 것보다 훨씬 낫다.
- 메모리 누수 감지기를 설치하여 첫날부터 실행하십시오.프로그램/시험이 종료되는 즉시 이 라이브러리에 모든 누출을 인쇄하도록 하십시오.이것은 당신이 그것을 소개하자마자 누수를 잡을 수 있게 해줄 것이고, 그로 인해 그것의 고치는 훨씬 덜 고통스러울 것이다.
- C에 OOP 코드를 쓰십시오.그렇게 어렵지 않다.메서드 재정의를 에뮬레이트하는 것은 가능하지만, 나는 당신이 간단한 오브젝트의 에뮬레이션으로 시작할 것을 제안한다.이 간단한 기계 장치조차도 당신에게 훌륭한 주행 거리를 줄 수 있다.
예를 들면 다음과 같다.
typedef struct Vector {
int size;
int limit;
int* ints;
} Vector;
Vector* Vector_new() {
Vector* res = (Vector*) malloc(sizeof(Vector));
res->limit = 10;
res->size = 0;
res->ints = (int*) malloc(sizeof(int) * res.limit);
return res;
}
void Vector_destroy(Vector* v) {
free(v->ints);
free(v);
}
void Vector_add(Vector* v, int n) {
if(v->size == v->limit) {
v->limit = v->limit * 2 + 10;
v->ints = realloc(v->ints, v->limit);
}
v->ints[v->size] = n;
++v->size;
}
int Vector_get(Vector* v, int index) {
if(index >= 0 && index < v->size)
return v->ints[index];
assert false;
}
OOP는 기술이 아닌 방법론이다.그래서 제 첫 번째 조언은 그것을 절차적 프로그래밍으로 생각하지 말라는 겁니다.
e.James의 요점에 따르면, 당신은 객체 지향 언어를 다시 만들려고 시도하거나 그 능력을 가지고 있는 척 하는 것을 원하지 않는다.몇 가지 간단한 원칙에 집착하면 여전히 모든 옳은 일을 할 수 있다.
- 모든 것을 테스트해 보십시오.
- 무엇이 다른지 찾아 캡슐화한다.
- 인터페이스에 대한 설계.
C에서 객체지향 코드를 쓰는 주제를 다룬 'ANSI-C와 함께 객체지향 프로그래밍'이라는 제목의 좋고 무료 온라인 책이 있다."객체 지향 C"를 검색하는 구글 검색은 또한 많은 다른 좋은 예와 자원을 산출한다.
당신의 프로젝트가 안전에 중요한 것이라면, MISRA-C는 좋은 규칙이다.주로 임베디드 c를 대상으로 하지만 다른 분야에서도 유용할 수 있다.
나는 나를 OO코더라고 생각하고 임베디드-C로 많은 일을 한다.특히 대형 프로젝트에 대해 내가 해줄 수 있는 최선의 조언은 무리하지 말라는 것이다.ANSI C 위에 완전한 OO 프레임워크를 만드는 것은 매우 유혹적일 수 있지만, 올바르게 하기 위해서는 많은 시간과 노력이 필요하다.더 많은 시간을 가질수록, 당신은 실제 프로젝트에서 일하는 대신 당신의 프레임워크를 디버깅하는 데 더 많은 시간을 할애할 것이다.명석한 두뇌로, 그리고 YAGNI를 훌륭하고 확실하게 파악하여 그 과제에 접근하라. 행운을 빈다!
'Programing' 카테고리의 다른 글
Vue JS - 하나의 구성 요소에 조건부로 정보를 표시 (0) | 2022.04.28 |
---|---|
어떻게 하면 한 끈이 다른 끈을 교체하는 것으로 끝나지 않는 방식으로 두 줄을 교체할 수 있을까? (0) | 2022.04.28 |
vue 구성 요소에서 href로 조건을 추가하려면 어떻게 해야 하는가? (0) | 2022.04.28 |
Java에서 일반 클래스 인스턴스화 (0) | 2022.04.28 |
Java Collection( 술어 기반)을 필터링하는 방법? (0) | 2022.04.27 |