2010-12-11 4 views
1

(예 : room) 어떤 개인 변수에도 액세스 할 필요가없는 함수가있는 경우 (예 : messUp) room.messUp() 또는 그 밖에있는 클래스 내부에 함수를 작성해야합니까? messUp(room)는? 그것은 두 번째 버전이 나에게 더 나은 읽는 것 같다.어떤 클래스에 넣을 함수

답변

2

여기서 절충점이 있습니다. 멤버 함수를 사용하여 다음과 같이 할 수 있습니다 : 파생 클래스에서

  • 재정의 구현, 부엌을 엉망으로하는 것은 더 찬장은 일반 객실을 사용할 수없는 경우에도 찬장을 부수고 포함 할 수 있도록.
  • 함수를 사용하는 모든 코드를 리팩토링 할 필요없이 나중에 개인 변수에 액세스해야한다고 결정하십시오.
  • 함수를 인터페이스의 일부로 만들어야합니다. 따라서 코드 조각은 그 인자가 엉망이 될 것을 요구할 수 있습니다. 외부 함수를 사용하여

다음을 수행 할 수 있습니다 (그들이 어질러에 필요한 멤버 함수를 제공하는 경우) 당신이 똑같이 실, 창고 및 석유 굴착에 적용 할 수 있도록 일반 기능

  • 만들기 .
  • 클래스 서명을 작게 유지하면 단위 테스트 (또는 다른 구현)를위한 모의 버전을 쉽게 만들 수 있습니다.
  • 해당 기능의 코드을 검사하지 않고 클래스 구현을 변경하십시오.

케이크를 가지고 먹을 수있는 실제 방법이 없으므로 선택해야합니다. 일반적인 OO 결정은 모든 것을 (분명히 바보가 아닌 한) 방법으로 만들고 세 점을 희생시키는 것이지만 모든 상황에서 그것을해야한다는 것을 의미하지는 않습니다.

2

객체의 클래스의 모든 행동이 인스턴스 방법으로 작성되어야한다. 그래서

room.messUp()이 작업을 수행 할 수있는 OO 방법입니다.

여부 messUp h 클래스의 비공개 멤버에 액세스 할 수 있는지 여부는 관련성이 없습니다. 방의 동작이라는 사실은 cleanUp 또는 paint 등과 같이 인스턴스 메서드라고 제안합니다.

0

해당 언어 무시 , 내 첫 번째 질문은 messUp 다른 기능과 관련이 있다고 생각합니다. 관련 기능 그룹이 있다면, 나는 그들을 수업에 집어 넣는 경향이 있습니다.

클래스 변수에 액세스하지 않으면 해당 변수를 정적으로 설정할 수 있습니다. 이렇게하면 클래스의 인스턴스를 만들 필요없이 호출 할 수 있습니다.

그 외에도 나는 언어를 살펴볼 것입니다. 일부 언어에서는 모든 함수가 일부 클래스의 메서드 여야합니다.

결국에는 큰 차이가 없다고 생각합니다. OOP는 응용 프로그램의 데이터와 논리를 구성하는 데 도움이되는 단순한 방법입니다. 이를 포용한다면 messUp (room)을 통해 room.messUp()를 선택하게됩니다.

+0

-1 "당신이 받아 들인다면 ..."... OO 언어를 사용하는 경우 전문적인 환경에서 의도 된대로 사용해야하며 개인의 변덕에 맡겨서는 안됩니다. 이것은 우리가 코딩 공포로 끝나는 방법입니다. – ocodo

+1

당신이 그의 코멘트를 읽는다면 그는 그가 OO 언어를 사용하고 있다고 말하지 않았을 것입니다. 그는 그게 무엇이든간에 더 나은 것을 묻는 중이었습니다. 게다가 C++과 같은 언어는 일상적으로 클래스 멤버가 아닌 함수를 가지고 있습니다. 사람들이 개발에 기울이는 접근법에 대한 나치가되는 것은 객관적인 목적을 제공하지 않습니다. 그래서 그것은 당신에게 2 가지가 잘못되었습니다 ... –

+0

@Jonathan, Godwins 법칙 -1, OP 질문에 사용 된 핵심어 누락. ... "어떤 클래스의 private 변수에 접근"non-OO 언어가 클래스에서 private 변수를 사용하는 것은 무엇입니까? (또는 심지어 교실을 가지고있다!) - 이제, 나는 엉망 (룸)이 행동하는 방식으로 행동하는 OO 시스템조차도 기능에 대한 좋은 사용/이유가 종종 있음을 반대하지 않을 것이다. 그러나 ... 1. 그것은 나에게 더 잘 읽힌다. 2. 나는 그처럼 기분이 좋기 때문에 좋은 이유가 아닙니다. 그러나 더 나쁘다 여전히 3입니다. 왜냐하면 나는 OO 언어로 캡슐화를 포용하고 싶지 않기 때문입니다. – ocodo

0

나는 Sutter와 Alexandrescu가 작성한 "C++ Coding Standards: 101 Rules, Guidelines, And Best Practices"과 Bob Martin의 솔리드입니다. 나는이 시점에서 그들과 동의한다 ;-).

메시지/함수가 클래스에 너무 많은 영향을 미치지 않으면 클래스 객체를 인수로 사용하는 표준 일반 함수로 만들어야합니다.

클래스와 밀접하게 관련이없는 행동으로 클래스를 분류하면 안됩니다. Single Responsibility Principle : 가장 정확한 목표를 목표로 수업을 계속 진행해야합니다.

그러나 메시지/기능이 개체 배짱과 밀접한 관련이 있다고 생각하면 클래스의 구성원 기능으로 포함시켜야합니다.

관련 문제