소프트웨어 공학 (C 코딩 실천 편) 학습 총화
코드 차원 의 소프트웨어 공학 에 대한 이해: 실험 과정 에서 저 는 가장 깊이 느 낀 것 은 세 가지 가 있 습 니 다.
4. 567917. 하 나 는 '규범' 이다.코드 규범 을 지 키 는 주요 목적 은 실행 효율 이 높 은 실행 가능 한 프로그램 을 컴 파일 하기 위 한 것 이 아니 라 다른 사람 이 읽 기 편 하도록 하 는 것 이다.소프트웨어 공학 이 공사 인 이상 여러 사람의 분업 과 협력 이 필요 하기 때문에 한 프로그래머 가 쓴 코드 는 자신 에 게 만 보 여 주 는 것 이 아니 라 합작 자 에 게 도 보 여 줘 야 하기 때문에 코드 는 약 속 된 규칙 을 지 켜 야 한다. 예 를 들 어 들 어 들 여 쓰기 에는 차원 이 있어 야 하고 대괄호 가 한 줄 을 독점 해 야 한다.각 대기업 들 은 심지어 자신의 프로 그래 밍 규범 을 제정 했다. 예 를 들 어 구 글 은 C + +, 자바, Python 등 여러 언어의 규범 을 연이어 제정 했다
4. 567917. 둘째, '분해' 이다. 즉, 복잡 한 큰 문 제 를 몇 가지 간단 하고 해결 하기 쉬 운 작은 문제 로 분해 한 다음 에 이런 작은 문 제 를 해결 하 는 것 이다.이런 '작은 문제' 를 어떻게 정의 하 는 지 는 추상 적 인 등급 의 확정 과 관련된다. 가장 전형 적 인 예 는 TCP / IP 의 계층 별 프로 토 콜 모델 이다.소프트웨어 공학 중의 모듈 은 전체 시스템 에서 상대 적 으로 독립 된 프로그램 단원 을 가리 키 며 각 프로그램 단원 이 상대 적 으로 독립 된 소프트웨어 기능 을 완성 하고 실현 하 는 것 을 말한다.통속 적 인 점 은 바로 독립 된 절차 구간 이다.모듈 의 디자인 에 대해 서 는 Keep it simple and stupid. 모듈 이 인 터 페 이 스 를 통 해 다른 모듈 과 상호작용 을 해 야 합 니 다.결합 은 소프트웨어 구조 에서 각 모듈 간 에 서로 연결 되 는 도량 으로 결합 강약 은 모듈 간 인터페이스의 복잡 도, 한 모듈 에 들 어가 거나 접근 하 는 점 과 인 터 페 이 스 를 통과 하 는 데이터 에 달 려 있다.한편, 내부 집적 은 기능 적 인 측면 에서 모듈 안의 관 계 를 측정 하 는 것 으로 좋 은 내부 집적 모듈 은 마침 한 가지 일 을 해 야 한다.그것 은 모듈 내의 기능 관 계 를 묘사 하고 있다
세 번 째 는 '통용' 이다. 코드 를 작성 하 는 것 은 '하나의' 문 제 를 해결 하 는 것 이 아니 라 '하나의' 문 제 를 해결 하 는 것 이다.이 를 실현 하기 위해 실험 5 에 서 는 콜 백 함수 파 라 메 터 를 이용 하여 링크 테이블 의 조회 인 터 페 이 스 를 더욱 통용 시 켰 다.함수 의 포인터 (주소) 를 매개 변수 로 다른 함수 에 전달 하면 이 포인터 가 가리 키 는 함수 로 사 용 될 때 우 리 는 이것 이 반전 함수 라 고 말 합 니 다.리 셋 함 수 는 이 함수 의 실현 자가 직접 호출 하 는 것 이 아니 라 특정한 이벤트 나 조건 이 발생 할 때 다른 한 측 이 호출 하여 이 이벤트 나 조건 에 응답 하 는 데 사 용 됩 니 다
tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Condition(tLinkTableNode * pNode, void * args), void * args)
{
if(pLinkTable == NULL || Condition == NULL)
{
return NULL;
}
tLinkTableNode * pNode = pLinkTable->pHead;
while(pNode != NULL)
{
if(Condition(pNode, args) == SUCCESS)
{
return pNode;
}
pNode = pNode->pNext;
}
return NULL;
}
Condition 은 호출 자의 정의 가 필요 합 니 다.
int SearchCondition(tLinkTableNode * pLinkTableNode, void * args)
{
tDataNode * pNode = (tDataNode *)pLinkTableNode;
char * tempchar = args;
if(strcmp(pNode->cmd, args) == 0)
{
return SUCCESS;
}
return FAILURE;
}
호출 형식 은 다음 과 같 습 니 다.
tDataNode* FindCmd(tLinkTable * head, char * cmd)
{
return (tDataNode*)SearchLinkTableNode(head,SearchCondition, cmd);
}
결론: 이런 수업 을 마 친 후에 제 가 가장 큰 수확 은 C 언어 를 쓰 는 능력 이 크게 향상 되 었 고 C 언어 안의 기술 로 소프트웨어 공학 을 어떻게 실현 하 는 지 알 게 되 었 습 니 다.예 를 들 어 예전 에 학부 에서 '데이터 구조' 로 링크 프로그램 을 쓸 때 링크 작업 은 보통 ADT 를 이렇게 정의 했다.
typedef struct StructNode
{
tLinkListNode *pNext;
elemtype data;
} tStructNode;
그리고 그것 에 대해 첨삭 과 수정 등 조작 을 한다.
소프트웨어 공학 에서:
typedef struct LinkListNode
{
struct LinkListNode * pNext;
} tLinkListNode;
이 ADT 안 에는 자신 을 가리 키 는 지침 만 있 고 삭제, 검사 등 함수 만 적 혀 있 습 니 다.
tLinkList * CreateLinkList();
int DeleteLinkList(tLinkList *pLinkList);
int AddLinkListNode(tLinkList *pLinkList,tLinkListNode *pNode);
int DelLinkListNode(tLinkList *pLinkList,tLinkListNode *pNode);
tLinkListNode *GetLinkListHead(tLinkList *pLinkList);
tLinkListNode *GetNextLinkListNode(tLinkList *pLinkList,tLinkListNode *pNode);
이후 데이터 필드 를 포함 하 는 ADT 를 정의 합 니 다.
typedef struct StructNode
{
tLinkListNode *pNext;
elemtype data;
} tStructNode;
tStructNode* pNode = (tStructNode*)malloc(sizeof(tStructNode));
다음 과 같은 방식 으로 호출 하면 됩 니 다 (* ppLink List 는 링크 헤드 를 가리 키 는 지침 입 니 다).
AddLinkListNode(*ppLinkList,(tLinkListNode *)pNode);
pNode = (tStructNode*)malloc(sizeof(tStructNode));
pNode->data = elemdata;
주의해 야 할 것 은 (tLinkListNode *) pNode 에서 강제 형식 변환 과 관련 되 기 때문에 ADT 를 정의 하 는 첫 줄 은 지침 을 정의 해 야 하기 때문에 아래 의 정의 방식 과 같이 잘못된 것 입 니 다.
typedef struct StructNode
{
elemtype data;
tLinkListNode *pNext;
} tStructNode;
이렇게 하 는 것 은 소프트웨어 공학 의 '분리' 원칙 에 부합 되 고 링크 작업 과 메뉴 데 이 터 를 분리 시 켜 프로그래머 가 한 가지 기능 에 전념 할 수 있 도록 하 는 것 이다.메뉴 가 어떤 모양 이 든 링크 를 디자인 해 야 하기 때문에 프로그램 이 더욱 통용 된다.이 실험 에 서 는 함수 포인터 도 사용 되 어 프로그램 을 더욱 유연 하 게 만 들 었 습 니 다. 메뉴 형식 을 모 르 는 상태 에서 프레임 워 크 를 잘 쓰 고 나중에 채 우 면 됩 니 다.
부족 하 다 면 이 수업 의 이름 은 '소프트웨어 공학' 이지 만 실제로는 도로 소프트웨어 공학 의 일부분 에 불과 하 다.소프트웨어 공학 에는 대상 을 대상 으로 하 는 분석, 디자인 모델 등 다른 내용 도 있 는데 이런 것들 은 상세 하 게 설명 하지 않 았 다.그래서 저도 소프트웨어 공학 의 뒷부분, OO 분석 과 디자인 편 과 과정 과 관리 편 을 기대 합 니 다.
첨부: 실험 보고서 집합
https://www.shiyanlou.com/courses/reports/1244095
https://www.shiyanlou.com/courses/reports/1245018
https://www.shiyanlou.com/courses/reports/1245520
https://www.shiyanlou.com/courses/reports/1246284
https://www.shiyanlou.com/courses/reports/1247031
https://www.shiyanlou.com/courses/reports/1248183
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c 언어 간단한 파일 r/w 조작 방법데이터의 입력과 출력은 거의 모든 C 언어 프로그램과 수반된다. 입력이란 원본에서 데이터를 얻는 것이다. 출력은 단말기에 데이터를 쓰는 것으로 이해할 수 있다.이곳의 원본은 키보드, 마우스, 하드디스크, 시디, 스캐...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.