소프트웨어 공학 (C 코딩 실천 편) 학습 총화

오리지널 작품 전재 출처 + MOOC 과정http://mooc.study.163.com/course/USTC-1000002006 왕 이 클 라 우 드 수업 에서 맹 녕 선생님 의 '소프트웨어 공학 (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

좋은 웹페이지 즐겨찾기