제4 장: 대상 과 데이터 구조
대상: 데 이 터 를 추상 에 숨 긴 후 조작 데이터 의 함 수 를 노출 합 니 다.데이터 구조: 데이터 자 체 를 노출 하고 의미 있 는 함 수 를 제공 하지 않 습 니 다.
예 를 들 어 아래:
public class Point {
public double x;
public double y;
}
public interface Point {
double getX();
double getY();
void setCartsian(double x,double y);
double getR();
double getTheta();
void setPolar(double r,double theta);
}
하 나 는 실현 을 드 러 냈 고, 하 나 는 실현 을 완전히 숨 겼 다.그러나 이 인 터 페 이 스 는 데이터 구 조 를 보 여 준다.숨겨 진 실현 은 변수 에 함수 층 만 추가 하 는 것 이 아 닙 니 다.숨 기 고 실현 하 는 것 은 추상 과 관련 이 있다!클래스 는 단순히 메모리 와 할당 기 를 사용 하 는 것 이 아니 라 추상 적 인 인 인 터 페 이 스 를 노출 하 는 것 입 니까? 사용자 가 데이터 의 실현 을 이해 하지 않 아 도 데이터 본 체 를 조작 할 수 있 습 니 다.
public interface Vehicle {
double getFuelTankCapacityInGallons();
double getGallonsOfGasoline();
}
public interface Vehicle {
double getPercentFuelRemaining();
}
상기 두 단락 의 코드 는 후자 가 좋다.우 리 는 데이터 의 세부 사항 을 폭로 하 기 를 원 하지 않 고 추상 적 인 형태 로 데 이 터 를 표현 하 기 를 원한 다.수치 기와 값 부여 기 를 함부로 넣 지 마라. 그것 은 최 악의 선택 이다.
프로 세 스 식 (데이터 구 조 를 사용 하 는 코드) 은 기 존의 데이터 구 조 를 바 꾸 지 않 는 전제 에서 새로운 함 수 를 추가 하 는 데 편리 하 다.대상 코드 는 기 존 함 수 를 바 꾸 지 않 는 전제 에서 새로운 종 류 를 추가 하 는 데 편리 하 다.반대로 말하자면 과정 은 코드 가 새로운 데이터 구 조 를 추가 하기 어렵 기 때문에 모든 함 수 를 수정 해 야 하기 때문이다.모든 클래스 를 수정 해 야 하기 때문에 대상 코드 에 새 함 수 를 추가 하기 어렵 습 니 다.결론: 모든 대상 은 전설 이 고 때로는 과정 적 인 조작 을 해 야 한다.
2. 드 머 테 르 율
The Law of Demeter: 모듈 은 조작 대상 의 내부 상황 을 이해 해 서 는 안 됩 니 다.더 정확히 말 하면 클래스 C 의 방법 f 는 다음 과 같은 대상 만 호출 해 야 한다 고 생각 합 니 다.
3. 데이터 전송 대상
가장 세련 된 데이터 구 조 는 공유 변수 만 포함 하고 함수 가 없 는 클래스 입 니 다.이런 구 조 는 때때로 데이터 전송 대상, DTO (Data Transfer Objects) 라 고 불 린 다.DTO 는 매우 유용 한 구조 로 특히 데이터베이스 와 통신 하거나 소켓 으로 메 시 지 를 전달 합 니 다.더 흔히 볼 수 있 는 것 은 bean 류 의 구조 이다.콩 구 조 는 자체 할당 기와 수치 추출 기 작업 의 개인 변 수 를 가지 고 있다.이런 반 봉 투 는 더욱 OO 적 으로 보일 수 있 는데, 당시 에는 통상 적 으로 아무런 이익 도 없 었 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.