programing

C에 '디자인 패턴'이 있습니까?

goodcopy 2022. 8. 8. 15:47
반응형

C에 '디자인 패턴'이 있습니까?

디자인 패턴은 일반적으로 OO 프로그래밍과 관련된 것으로 알고 있습니다만, C를 프로그램 할 때 자주 사용하는 패턴이 있습니까?

저는 고전적인 OO패턴의 간단한 번역에는 관심이 없습니다.더프의 디바이스는 언급하지 말아주세요.;-)

내가 가장 좋아하는 것은 Adam Tornhill의 "Patterns in C" 시리즈이다.

또 : 항상 생각나는 건goto장식가 무늬를 위한 훌륭한 가난한 남자의 도구입니다.

업데이트: C를 사용해야 하는 경우를 제외하고 C보다 Rust(rust-lang.org)를 사용하는 것이 좋습니다.Rust는 속도나 바이너리 라이브러리와 c와의 호환성을 포함하여 c의 모든 이점을 가지고 있지만, 컴파일러는 복잡성의 대부분을 처리하여 코드가 안전하고 데이터 레이스를 포함하지 않도록 합니다.또한 휴대성이 뛰어나고, 일반적인 작업을 위한 표준 라이브러리를 갖추고 있으며, 다양한 디자인 패턴에 맞게 프로그래밍하기 훨씬 쉽습니다.

디자인 패턴은 언어 기능이 결여된 것으로 간주될 수 있습니다.디자인 패턴의 도입: 재사용 가능한 객체 지향 소프트웨어 상태 요소:

프로그래밍 언어의 선택은 한 사람의 관점에 영향을 미치기 때문에 중요하다.우리의 패턴은 Smalltalk/C++ 레벨의 언어 기능을 상정하고 있으며, 그 선택에 따라 쉽게 구현할 수 있는 것과 구현할 수 없는 것이 결정됩니다.절차 언어를 가정하면 "상속", "캡슐화", "다형성"이라는 설계 패턴을 포함했을 수 있습니다.마찬가지로, 일부 패턴은 덜 일반적인 객체 지향 언어에 의해 직접 지원됩니다.예를 들어 CLOS에는 Visitor와 같은 패턴의 필요성을 줄이는 여러 가지 방법이 있습니다.(이탈리아인 내 것)

이탤릭체로 된 문장이 당신의 질문에 대한 답입니다.

정수리부터

통한 다형성(다형성)qsort할 수 .필요한 것은 두 요소를 비교하는 방법뿐이며, 배열도 정렬할 수 있습니다.

일반적인 루틴이 이를 유용하게 처리할 수 있도록 함수의 집합(vtable)을 사용하여 유형의 관련 속성을 나타내면 이보다 훨씬 정교해질 수 있습니다.예를 들어, 열린 파일 또는 네트워크 포트에서 읽기, 쓰기 등이 호출됩니다.

가상 파일 시스템은 설계 패턴을 학습하기 위한 완벽한 예입니다.

디자인 패턴은 기존 환경에서 제공하는 것과 한 단계만 차이가 나는 것을 모델링하는 경우가 많습니다.C를 표준 라이브러리와 함께 환경으로 사용할 경우 두드러진 디자인 패턴은 객체 지향입니다.

네, 있어요.슬로지 초기화, 싱글톤, 오브젝트 풀, 오브젝트 상태 등은 순수 C에서 쉽게 구현됩니다.

예(Lazy Initialization)

#include <stdio.h>

struct foo
{
    int payload;
};

int calculate_payload()
{
    printf("%s\n", "Performing lengthy initialization...");
    return 42;
}

struct foo *get_default_foo()
{
    static int foo_calculated = 0;
    static struct foo default_foo;
    if (!foo_calculated) /* assuming single-threaded access */
    {
        foo_calculated = 1;
        default_foo.payload = calculate_payload();
    }
    return &default_foo;
}

int main()
{
    struct foo *foo1, *foo2;

    printf("%s\n", "Starting the program");

    foo1 = get_default_foo();
    printf("%d\n", foo1->payload);

    foo2 = get_default_foo();
    printf("%d\n", foo2->payload);

    return 0;
}

언급URL : https://stackoverflow.com/questions/4112796/are-there-any-design-patterns-in-c

반응형