programing

C 프로그래밍 언어는 객체 지향입니까?

prostudy 2022. 6. 20. 21:06
반응형

C 프로그래밍 언어는 객체 지향입니까?

C와 C++에 대해 동료와 이야기를 하고 있었는데, 그는 C가 객체 지향적이라고 주장했지만, 나는 그렇지 않다고 주장했습니다.C에서는 오브젝트 지향적인 것을 할 수 있는 것은 알지만, C++는 진정한 오브젝트 지향 언어입니다.

어떻게 생각하세요?

또한, 그것은 누가 객체 지향의 의미를 결정하는지, 그리고 객체 지향의 진짜 의미를 공식적으로 말하기가 어렵다는 것에 대한 논의를 촉발시켰다.이것에 대해 어떻게 생각하세요?

"C 객체가 지향적이냐"는 것이 "C가 객체 지향 프로그래밍을 지원하기 위해 특별히 설계되었는가?"를 의미한다면, 아니요, C는 분명히 객체 지향적이지 않습니다.

C는 객체 지향 언어가 아닙니다.C는 구조화된 프로그래밍을 지원하는 범용 명령어입니다.C는 객체 지향적이지 않기 때문에 OOP 기능을 가지기 위해 C++가 등장했고 OOP는 객체 중심으로 구성된 프로그래밍 언어 모델입니다.OOP 기능을 갖추기 위한 언어는 OOP의 특정 원칙을 구현해야 합니다.그 중 몇 가지는 상속, 다형성, 추상화, 캡슐화입니다.

답변은 다음 조건에 따라 "" 또는 "아니오"가 될 수 있습니다.

  • "C가 객체 지향 언어입니까?"라고 묻는 경우, 객체 지향 생성자, 키워드, 의미론 등이 없기 때문에 "아니오"라고 대답합니다.

  • 만약 당신이 "C에서 OOP를 실현할 수 있나요?"라고 생각하신다면, 대답은 "그렇습니다"입니다. OOP는 언어의 요건일 뿐만 아니라 프로그래밍에 대한 접근법인 "생각"의 한 방법이기 때문입니다.단, C에서의 OOP 구현(또는 OOP가 네이티브로 설계되지 않은 다른 언어)은 다른 OOP 언어보다 확실히 "강제"되고 관리가 매우 어렵기 때문에 약간의 제약이 있을 것으로 예상됩니다.

거의 모든 언어로 객체 지향 스타일로 프로그래밍할 수 있습니다.(실행시 다형성, 즉 가상 메서드는 함수 포인터를 지원하는 언어가 필요하다고 생각합니다.)

다음은 몇 가지 예입니다.

  • C의 객체 지향 스타일에 대한 간단한 요약:http://www.emilmont.net/doku.php?id=c:object_oriented_c
  • C와 C++로 작성된 동일한 프로그램 비교:http://www.eventhelix.com/realtimemantra/basics/object_oriented_programming_in_c.htm

C는 'O-O'와 '언어'의 어떤 정의에서도 O-O 언어가 아닙니다.

클라이언트에 O-O API를 제공하는 컴포넌트의 구현 언어로 C를 사용하는 것은 매우 쉽습니다.X Windows 시스템은 API에서 볼 때 기본적으로 단일 상속 O-O 시스템이지만 구현 상태를 볼 때 C의 모든 것이 뒤죽박죽입니다.

당신의 친구가 목표 C(C의 OO 슈퍼셋)에 대해 이야기한 것이 아니라면, C는 OO 언어가 아닙니다.C를 사용하여 OO 개념을 구현할 수 있습니다(구 Cfront C++ 컴파일러는 C++를 C로 변환함). 그러나 다형성이나 캡슐화와 같은 표준 OO 기술을 특별히 지원하지 않기 때문에 C를 OO 언어로 만들지는 않습니다.

네, 소프트웨어 OO스타일은 C로 작성할 수 있습니다.특히 매크로를 자유자재로 사용하면 가능하지만, 그 결과를 본 사람으로서 보다 적합한 언어를 사용하는 것이 좋습니다.

실제 프로그래머는 객체 지향 코드를 모든 언어로 작성할 수 있습니다.

하지만 C는 '객체 지향' 언어가 아닙니다.클래스, 오브젝트, 다형성, 상속의 개념이 없습니다.

C는 객체 지향적이지 않습니다.이것이 바로 ++의 모든 목적입니다.

오브젝트 지향의 정의에 관해서는 위키피디아를 체크해 주세요.

개인적으로 상속, 캡슐화 및 다형성을 지원한다면 언제든지 사용할 수 있습니다.여기서 또 하나의 열쇠는 클래스나 오브젝트가 도움이 되는 좋은 키워드를 갖는 것입니다.

실제 객체 지향 언어의 예로는 Smalltalk, Java, c#, Python, Ruby, C++ 등이 있습니다.

또, PHP, Perl, VB등의 OO기능을 제공하는 확장기능을 가지는 것도 가능합니다(확장기능은 없습니다.넷), ...

아니, 그렇지 않아, 네 친구는 틀렸어.

C는 다형성, 캡슐화 등의 객체 지향 개념을 구현하기 위해 사용될 수 있으며, 이로 인해 당신의 친구는 C가 객체 지향적이라고 믿게 될 수 있습니다.문제는 객체 지향 프로그래밍 언어로 간주되기 위해서는 이러한 기능이 언어에 내장되어야 한다는 것입니다.하지만 그들은 그렇지 않다.

  1. C는 클래스, 상속 등의 구문을 지원하는 객체 지향 기능이 내장되어 있지 않기 때문에 엄밀한 의미에서 객체 지향은 아닙니다.

그러나 이 방법을 알고 있다면 구조, 함수 포인터 및 셀프 포인터를 사용하여 객체 지향 기능을 쉽게 추가할 수 있습니다.DirectFB는 객체 지향 방식으로 작성된 C 라이브러리입니다.단점은 구문 및 컴파일 유형 체크에 의해 제어되지 않기 때문에 오류가 발생하기 쉽습니다.대신 코딩 규칙을 기반으로 합니다.

예.

  IDirectFB/*a typedef of a struct*/ *dfb = NULL;
  IDirectFBSurface/*another typedef of a struct*/ *primary = NULL;
  DirectFBCreate (&dfb); /*factory method to create a struct (e.g. dfb) with 
                         pointers to function and data. This struct is 
                         like an object/instance of a class in a language with build-in 
                         syntax support for object oriented capability  */
  dfb->SetCooperativeLevel/*function pointer*/ 
          (dfb/*self pointer to the object dfb*/, 
           DFSCL_FULLSCREEN);
  dsc.flags = DSDESC_CAPS;
  dsc.caps  = DSCAPS_PRIMARY | DSCAPS_FLIPPING;
  dfb->CreateSurface/*function pointer, also a factory method 
                       to create another object/instance */
          ( dfb/*self pointer to the object dfb*/, 
            &dsc, 
            &primary/*another struct work as object of another class created*/ );
  primary->GetSize/*function pointer*/ 
              (primary/*self pointer to the object primary*/, 
               &screen_width, 
               &screen_height);

2. C++는 클래스 및 상속과 같은 객체 지향 기능을 기본적으로 지원하므로 객체 지향입니다.그러나 C 구문(구조 프로그래밍 구문)을 사용할 수 있기 때문에 완전한 객체 지향 언어가 아니라는 주장이 있습니다.또한 C++에는 객체 지향 기능이 몇 개 부족하지만 각각을 정확하게 기억하지 못하는 것으로 기억합니다.

실제 프로그래머는 객체 지향 코드를 모든 언어로 작성할 수 있습니다.

나는 객체 지향 코볼을 본 이 있다.코볼을 호출하는 코볼.당신은 이 프로그래머들을 "진짜"라고 부르고 싶습니까?

C는 객체 지향적이지 않습니다.

C는 오브젝트 방향향하지 않습니다.

C++는 그렇다.

C 자체는 절차 언어로서 부풀려져 있었지만(순서의 관점에서 「생각」하고 있다).먼저 함수 A를 실행한 후 출력을 함수 B 등에 전달하면 OOP over C를 구현할 수 있습니다(OOP에서는 스토리는 함수와 호출 순서가 아닌 객체와 그 책임에 의해 구동됩니다).실제로 일부 초기 C++ 구현에서는 코드를 일부 C 코드로 변환한 후 구축했습니다.단, C를 사용해야 하는 경우가 있습니다(C++를 지원하지 않는 임베디드 디바이스/GPU 언어 등).그리고 너는 OOP를 원해.COOP - C 객체 지향 프로그래밍을 위한 가볍지만 강력한 프레임워크인 COOP을 확인해 보시기 바랍니다.

C는 객체 기반 언어이므로 상속, 다형성 등 객체 지향 언어의 많은 기능을 지원하지 않습니다.

C는 객체 지향적이지 않습니다.C++는 객체 지향적이지 않습니다.설명하겠습니다.Object Oriented는 Simula의 이전 패션 이벤트 기반 서브셋의 확장입니다.실제 객체 지향은 기능적이고 반영적입니다. 객체 지향은 실제로 패러다임(이벤트 중심, 기능적, 반사적)의 그룹이기 때문입니다.실제 객체 지향 언어는 리스프, 스몰톡, 루비, 오카멜 4개뿐입니다.Perl은 기능하지 않기 때문에 사이에서 지연됩니다.스칼라는 반사성이 없기 때문에 뒤처집니다.C++는 Simula와 유사한 설비에 의해 이벤트 구동될 뿐이지만 완전히 구조화된 프로그래밍 언어이며 선언적이지도 않고 실제 세계와 일치하지도 않습니다.객체 지향은 실제 세계를 함수(수학), 이벤트 중심(대화) 및 반사성(진화)과 일치시킵니다.C++는 대화만 합니다.C++는 수학처럼 선언적이지도 않고 생명처럼 진화하지도 않습니다.C++는 사람처럼 대화만 해요.C++는 수학이 어떻게 작용하는지, 삶이 어떻게 진화하는지 모르는 바보와 같다.

언급URL : https://stackoverflow.com/questions/3241932/is-the-c-programming-language-object-oriented

반응형