프로 그래 밍 기본기 (4)
3262 단어 프로 그래 밍
데이터 구조 와 대상
데이터 구조
OO 세계 에서 데이터 구 조 는 능력 이 없 는 순수한 실 체 를 의미 하 는데 이런 상황 은 매우 드물다 (순수한 데이터 구조의 집적 을 의미 하기 때문이다).
예:
public struct Point {
public double X {get; set;}
public double Y {get; set;}
private double x;
private double y;
}
1. 우 리 는 그것 으로 점 을 저장 할 수 있다. 이 점 은 모든 모양 의 일부분 일 수 있다.
2. 그 어떠한 능력 도 갖 추 지 못 하고 데이터 에 대한 통합 일 뿐이다.
3. 장점: 수정 행 위 는 쉽다. 여기 서 데 이 터 를 대표 하기 때문에 여러 곳 에서 인용 해도 영향 을 주지 않 는 다.단점: 데이터 구 조 를 수정 하 는 것 이 어렵 고 여러 곳 에서 인용 하면 많은 부분 에 영향 을 줄 수 있다.
대상
대상 은 인터페이스 와 밀접 한 관 계 를 가진다. 상례 에 대응 하 는 인터페이스 예시:
public interface Point {
double getX();
double getY();
void setCartesian(double x, double y);
double getR();
double getTheta();
void setPolar(double r, double theta);
}
1. 데이터 가 봉인 되 었 습 니 다.
2. 일부 대상 의 능력 을 노출 하여 사용 할 수 있 으 나 패 키 징 기반
3. 장점: 데이터 구조 가 봉인 되 어 있 기 때문에 데이터 구 조 를 수정 하 는 것 이 쉽다.인 터 페 이 스 는 대상 능력 (행위) 목록 으로 원가 가 비교적 크다 (open - close 원칙, 보통 인터페이스 만 증가).
결론:
프로 세 스 디자인 으로 인해 function 을 수정 할 때 데이터 구조 (순수 실체 류) 를 수정 하지 않 아 도 됩 니 다.OO 디자인 은 기 존의 function 을 수정 하지 않 고 클래스 를 추가 하 는 방식 으로 기능 을 확장 할 수 있 습 니 다.
프로 세 스 디자인 은 데이터 구 조 를 수정 하 는 것 이 매우 어렵다. 왜냐하면 모든 인용 부분 이 고 쳐 야 하기 때문이다.OO 디자인 은 인 터 페 이 스 를 바 꾸 는 것 이 매우 번 거 롭 습 니 다. 모든 관련 유형 이 바 뀌 어야 하기 때 문 입 니 다. (따라서 경 량 인 터 페 이 스 를 일찍 고려 하고 개발 과정 은 인터페이스 만 증가 합 니 다)
지루 한 호출 을 피하 다.
다음 줄 코드 를 보십시오.
string outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
분명히 재 구성 하면:
string outputDir = GetAbsolutePath();
private string GetAbsolutePath(){
return ctxt.getOptions().getScratchDir().getAbsolutePath();
}
코드 의 의도 가 뚜렷 하고 호출 자 도 매우 편리 하 다.
Return ErrorCode 대신 예외 던 지기 사용 하기
1. ErrorCode 는 전체적인 level 로 정의 가 매우 전면적 이지 않 으 면 수정 하면 전체 국면 에 영향 을 주 고 이상 류 를 추가 하 는 것 이 비교적 쉽다.
2. 중복 정의 가 나타 나 기 쉽다
3. 이상 은 wrapper 를 사용 하여 오류 처리 와 business 간 의 결합 을 접 할 수 있 지만 errorcode 를 사용 하면 결합 을 풀 수 없습니다.
Wrapper Exception
이 코드 보기:
try {
port.open();
} catch(DeviceResponseException e) {
reportPortError(e);
logger.log("Deviceresponse exception", e);
} catch(ATM1212UnlockedException e) {
reportPortError(e);
logger.log("Unlockexception", e);
} catch (GMXErrore) {
reportPortError(e);
logger.log("Deviceresponse exception");
}
만약 여러 곳 에서 port. open 함 수 를 호출 해 야 한다 면, 곳곳에 이런 catch chain 이 있다.해결 방법 은 port 를 wrap 하고 catch chain 을 wrap 하 는 것 입 니 다.
public class LocalPort {
private ACMEPort innerPort;
public LocalPort(int portNumber) {
innerPort =new ACMEPort(portNumber);
}
public void open() {
try {
innerPort.open();
} catch(DeviceResponseException e) {
throw new PortDeviceFailure(e);
} catch(ATM1212UnlockedException e) {
throw new PortDeviceFailure(e);
} catch(GMXError e) {
109 Definethe Normal Flow
throw new PortDeviceFailure(e);
}
}
…
}
이렇게 하면 호출 된 코드 의 의 도 를 매우 명확 하 게 할 수 있다.
try {
port.open();
} catch(PortDeviceFailure e) {
reportError(e);
logger.log(e.getMessage(),e);
}
Wrapper 는 사실 Adapter 모드 의 응용 중 하나 로 이상 을 제외 하고 제3자 library 와 다른 API 호출 을 wrap 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Linux Shell 프로 그래 밍 - 텍스트 처리 grep, sed사용자 가 지정 한 '모드' 에 따라 대상 텍스트 를 일치 하 게 검사 하고 일치 하 는 줄 을 인쇄 합 니 다. ##포함 되 지 않 음, 역방향 일치 \ ##키워드 앞 뒤 가 맞지 않 고 키워드 만 일치 합 니 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.