2013-12-15 6 views
2

Java로 프로그래밍 할 때 관련 코드를 클래스에 유지하고 클래스 구조, 계층 구조 등을 구성하여 코드 재사용을 극대화하십시오.Java에서 C 코드 조직으로 전환

이제 C를 사용하기 시작했습니다. C 코드를 모듈 방식으로 구성하는 가장 좋은 방법은 다소 혼란 스럽습니다. 분명히 헤더와 소스 파일을 알고 있지만 C에서 코드 재사용을 극대화하는 데는 다소의 손실이 있습니다.

그렇다면 C와 같이 분명히 지원하지 않는 언어로 코드를 구성하는 방법은 무엇입니까? OOP. C 나이이고,이고 proceedural 언어

OOP

동안 그 자바는 현대 및 설계되었습니다에

+0

하나는 자바와 같은 언어에 익숙하다. 과도기적 인 조언. –

답변

0

두 언어가 다르다. 언어가 다르므로 프로그램 방식은 일반적으로 다르며 레이아웃도 다릅니다.

C 프로그램에는 .h 파일의 헤더 (기능 프로토 타입)와 .c 파일의 기능 코드가 있습니다.

모듈성의 관점에서 보면, 코드를 구분하는 방식으로 자바와 비슷한 패턴을 계속 따라갈 수 있습니다. 경험상 일반적으로 한 파일은 한 가지 작업 만 수행해야합니다. 즉 string_parser.c는 문자열 파싱 만 처리해야합니다. list_sorter.c는 목록 정렬 등을 처리해야합니다.

"유틸리티"파일과 같은 것들이 유용하기 때문에 재사용이 가능한 유용한 코드가 하나의 C 파일에 포함될 수 있고 필요한 곳에 포함될 수 있습니다. C에서 코드를 중복해서는 안되기 때문에 복사/붙여 넣기 기능을 중앙화 된 파일에 넣고 여러 위치에 포함 시키십시오.

일반 함수를 작성하십시오! 기능을 간단하고 공개적으로 유지하여 덜 구체적으로 기능을 재사용 할 수 있습니다.

Java 코드 레이아웃 지식을 염두에 두는 것이 좋지만 좋은 C 가이드를 확인하십시오. http://www.doc.ic.ac.uk/lab/cplus/cstyle.html

일반적으로 좋은 프로젝트 디자인은 프로젝트의 파일 레이아웃/구조를 만드는 데 도움이됩니다.

+0

어제 죄송합니다. 긴 밤이었습니다. – FaddishWorm

+0

@ FaddishWorm 그게 당신이 의미하는 바라고 생각했습니다. 긴 밤? 나는 그걸 안다. –

+0

@VisionIncision 네, 커다란 주간에, 카페인을 없애려고 노력하고 있습니다. P : – FaddishWorm

0

JavaC 사이의 주요 스타일 차이에 대해 말하면 저는 이것이 OOP 부재라고 말하고 싶습니다.

일반적으로 C를 '오래된 언어'와 같이 생각하는 것은 잘못입니다. 그것은 완전히 다른 언어이고 그 성질은 완전히 다릅니다. Java가 응용 프로그램 개발자에게 안전을 제공하기 때문에 Java가 낮은 수준을 처리하는 데있어서 완벽하지는 않습니다. C는 그런 유용성이 없지만 적절한 책임을 가지고 주변 상황에 대한 통제권을 부여합니다.

Java를 통한 C의 주요 이점은 인터페이스와 구현 간의 거리입니다. 그냥 그림 : 헤더가있을 때 실제로 인터페이스 개념을 가지고 있으며 실제로 인터페이스입니다. 헤더를 기반으로 동일한 인터페이스를 구현하는 완전히 다른 모듈을 연결할 수 있습니다. 글쎄, 당신은 그런 것들에 대한 언어 통제가 없을 것이고, 그들은 정말로 안전하지 못하다. Java와의 차이를 느껴보십시오.

C에서 메소드 구현에 대한 함수 유형의 포인터가있는 구조를 기반으로 OOP 접근 방식을 구현할 수 있습니다. 이 바인딩은 초기화 또는 런타임 변경의 대상이되므로 '런타임 유연 OOP'와 같은 것을 수신하면됩니다. 그것은 반사에서 가깝지만 ... 훨씬 더 빠르고 위험합니다.

좋은 C 권장 사항을 찾으려면 Linux 커널 소스를 확인하십시오. 이 코드는 최신 C 베스트 프랙티스에 따라 발전하며 아마도 고품질의 매우 큰 C 프로젝트를 가장 잘 보여줄 것입니다.

희망이 도움이 될 것입니다.

0

나는 이런 식으로 생각하는 경향이 :

  • 자바 클래스의 C 등가가 .c ​​인/.H 파일 한 쌍에 있어야합니다. 데이터 (private 또는 public)는 struct에 포함됩니다 (바람직하게는 .c 파일에서만 선언 됨). .h 파일에 선언 된 모든 함수에는 구조체에 대한 포인터가 매개 변수로 있습니다. .h 파일에는 구조체의 선언 만 있으면됩니다.
  • java 패키지의 C 등가성은 다른 디렉토리에서 파일을 찾는 것만으로는 달성 할 수 없습니다. 그러나 단일 글로벌 네임 스페이스로 인해 XXXNAME_YYYNAME_ZZZNAME_FunctionName()은 XXXNAME이 회사 이름이고 YYYNAME이 제품 또는 라이브러리의 이름 인 경우 각 비 정적 함수 앞에 접두어를 붙이고 고유 한 값을 입력해야합니다 ZZZNAME은 제품/라이브러리 내의 서브 패키지 이름입니다. 나는 회사 이름이 전혀 사용되지 않는 것이 실생활에서 흔하지 않으며, 제품/라이브러리가 "작다"면 사용되지 않는다는 것을 알았다.
  • (단일) 상속은 "하위 클래스"의 구조체의 첫 번째 요소로 "baseclass"구조체를 넣어 쉽게 구현할 수 있습니다. 그러나 상속 구조는 전체 구조체를 노출시키지 않고 클라이언트에 쉽게 노출 될 수 없습니다.

예 헤더 파일 :

struct CARLIB_Car_s; 

void CARLIB_Car_Drive(struct CARLIB_Car_s *pCar, uint16_t KiloMeters); 

예제 소스 파일 :

struct CARLIB_Car_s { 
    uint16_t FuelLeft; 
}; 

void CARLIB_Car_Drive(struct CARLIB_Car_s *pCar) 
{ 
    // ... 
} 
나는 위의 문서를 참조했다,하지만 난에 대한 코드 구성 기술을 요구하고로이 질문에 보증 된 생각