2010-12-17 4 views
0

나는 OOP를 배우고 있는데, 한 쪽과 다른 쪽에서 처음 다루는 방법에 대한 정보를 얻기 위해 래퍼 클래스를 만드는 나쁜 프로그래밍 버릇이 있다는 것을 알았지 만, 나는이 개념을 이해하지 못한다. 가능한 경우 몇 가지 설명과 예를 묻습니다. 사전"나쁜 프로그래밍 습관"에 대한 설명?

+6

안녕하세요. 몇 가지 구체적인 예를 보여 주어야합니다. 어떤 문맥도없이 답을 내리는 것은 불가능합니다. –

+1

흡연은 일반적으로 나쁜 프로그래머 습관이지만 내가 아는 것은 무엇인지, 나는 PHP를 사용 중입니다 ... – Anycorn

+1

아마도 여기 제안은 이것들이 하나의 클래스 여야한다는 것입니다. 정보에 작용하는 클래스도 그것을 저장해야합니다. 아마도 당신이 제공 할 모범이 없다면 적어도이 조언을 찾은 곳으로 링크 할 수 있습니까? –

답변

1

에서

덕분에 당신은 무엇을 설명하는 것은 "단순 모델"이며, 그것은 아주 사소한 문제입니다. 정보 클래스의 모든 필드를 치는 코드를 보거나 변경하거나 읽을 수있는 데이터 구조에 도달하기 시작합니다. 특히 응용 프로그램의 여러 부분에서 유사한 작업을 수행하는 경우 특히 유용합니다. 당신이 그 중 하나를 잡으면, 그 작업을 정보 수업의 방법으로 옮겨보십시오.

두 번째 유형의 문제를 추적하는 좋은 방법은 한 도트 규칙입니다. 다른 클래스 안에있는 클래스의 메서드를 호출하는 경우 첫 번째 클래스는 메서드에서 작업을 처리해야합니다.

+0

나는 "멍청한 모델"이라는 이름을 좋아하지 않는다. 전에 들어 보지 못했다. –

2

정보 클래스 내부에서 메소드가 더 나을 수있는 상황에 처해있는 것 같습니다. 두 개가 병합되어야하며 정보에 작용하는 클래스가 저장해야합니다.

class CoordinatePair 
{ 
     float x, y; 

     public Coordinate(float xIn, float yIn) {x = xIn; y = yIn;} 

     public getX() {return x;} 
     public getY() {return y;} 
} 

class CoordinateTools 
{ 
     public CoordinatePair add(Coordinate a, Coordinate b) 
     { 
     return new CoordinatePair(a.getX() + b.getX(), a.getY() + b.getY()); 
     } 

     public float dotProduct(Coordinate a, Coordinate b) 
     { 
     returna a.getX() * b.getX() + a.getY() * b.getY()); 
     } 
} 

더 나은 함께 할 수 없습니다 (또는 다른 오버로드 된 연산자를 최소한 정적 도구 클래스)이 예는 가지 사소한

class CoordinatePair 
{ 
     float x, y; 

     public Coordinate(float xIn, float yIn) {x = xIn; y = yIn;} 

     public getX() {return x;} 
     public getY() {return y;} 

     public CoordinatePair sumWith(CoordinatePair other) {//body} 

     public float dotProductWith(CoordinatePair otheR) {//body} 

} 

하지만 당신은 희망이와 함께 점점 더 악화 볼 수 있었다 더 복잡한 것들.

1

나는 그것을 말할 것이다 : 그것은 달려있다.

예를 들어 data transfer objects 또는 domain entities과 같이 행동과 데이터를 분리하는 것이 가장 좋은 해결책이 될 수 있습니다. 이 분리는 알고리즘을 설계 할 때 유용합니다 - visitor pattern 또는 STL algoritms이 어떻게 설계되었는지보십시오.

일반적으로 Single responsibility principle이 중요합니다. 객체가 논리적으로 독립적 인 많은 다른 작업을 수행하려고하는 경우 해당 작업을 데이터에서 분리하면 좋은 해결책이 될 수 있습니다.