(예 : room
) 어떤 개인 변수에도 액세스 할 필요가없는 함수가있는 경우 (예 : messUp
) room.messUp()
또는 그 밖에있는 클래스 내부에 함수를 작성해야합니까? messUp(room)
는? 그것은 두 번째 버전이 나에게 더 나은 읽는 것 같다.어떤 클래스에 넣을 함수
답변
여기서 절충점이 있습니다. 멤버 함수를 사용하여 다음과 같이 할 수 있습니다 : 파생 클래스에서
- 재정의 구현, 부엌을 엉망으로하는 것은 더 찬장은 일반 객실을 사용할 수없는 경우에도 찬장을 부수고 포함 할 수 있도록.
- 함수를 사용하는 모든 코드를 리팩토링 할 필요없이 나중에 개인 변수에 액세스해야한다고 결정하십시오.
- 함수를 인터페이스의 일부로 만들어야합니다. 따라서 코드 조각은 그 인자가 엉망이 될 것을 요구할 수 있습니다. 외부 함수를 사용하여 이
다음을 수행 할 수 있습니다 (그들이 어질러에 필요한 멤버 함수를 제공하는 경우) 당신이 똑같이 실, 창고 및 석유 굴착에 적용 할 수 있도록 일반 기능
- 만들기 .
- 클래스 서명을 작게 유지하면 단위 테스트 (또는 다른 구현)를위한 모의 버전을 쉽게 만들 수 있습니다.
- 해당 기능의 코드을 검사하지 않고 클래스 구현을 변경하십시오.
케이크를 가지고 먹을 수있는 실제 방법이 없으므로 선택해야합니다. 일반적인 OO 결정은 모든 것을 (분명히 바보가 아닌 한) 방법으로 만들고 세 점을 희생시키는 것이지만 모든 상황에서 그것을해야한다는 것을 의미하지는 않습니다.
객체의 클래스의 모든 행동이 인스턴스 방법으로 작성되어야한다. 그래서
room.messUp()
이 작업을 수행 할 수있는 OO 방법입니다.
여부 messUp
h 클래스의 비공개 멤버에 액세스 할 수 있는지 여부는 관련성이 없습니다. 방의 동작이라는 사실은 cleanUp
또는 paint
등과 같이 인스턴스 메서드라고 제안합니다.
해당 언어 무시 , 내 첫 번째 질문은 messUp 다른 기능과 관련이 있다고 생각합니다. 관련 기능 그룹이 있다면, 나는 그들을 수업에 집어 넣는 경향이 있습니다.
클래스 변수에 액세스하지 않으면 해당 변수를 정적으로 설정할 수 있습니다. 이렇게하면 클래스의 인스턴스를 만들 필요없이 호출 할 수 있습니다.
그 외에도 나는 언어를 살펴볼 것입니다. 일부 언어에서는 모든 함수가 일부 클래스의 메서드 여야합니다.
결국에는 큰 차이가 없다고 생각합니다. OOP는 응용 프로그램의 데이터와 논리를 구성하는 데 도움이되는 단순한 방법입니다. 이를 포용한다면 messUp (room)을 통해 room.messUp()를 선택하게됩니다.
나는 Sutter와 Alexandrescu가 작성한 "C++ Coding Standards: 101 Rules, Guidelines, And Best Practices"과 Bob Martin의 솔리드입니다. 나는이 시점에서 그들과 동의한다 ;-).
메시지/함수가 클래스에 너무 많은 영향을 미치지 않으면 클래스 객체를 인수로 사용하는 표준 일반 함수로 만들어야합니다.
클래스와 밀접하게 관련이없는 행동으로 클래스를 분류하면 안됩니다. Single Responsibility Principle : 가장 정확한 목표를 목표로 수업을 계속 진행해야합니다.
그러나 메시지/기능이 개체 배짱과 밀접한 관련이 있다고 생각하면 클래스의 구성원 기능으로 포함시켜야합니다.
- 1. PHP : 클래스에 함수 전달
- 2. 문자열 클래스에 함수 추가
- 3. 리포지토리 클래스에 얼마를 넣을 수 있습니까?
- 4. 템플릿이 아닌 클래스에 템플릿 함수?
- 5. 특징 클래스에 의한 특수화 함수
- 6. main 메서드는 어떤 클래스에 속합니까?
- 7. guice는 어떤 클래스에 객체를 주입합니까?
- 8. Java 라이브러리 클래스에 새 함수 추가
- 9. matlab에있는 클래스에 대한 모든 함수 연산자 오버로드
- 10. 클래스에 MySQL select 문을 넣고 하위 클래스에 CRUD 문을 넣을 필요가 있습니까?
- 11. factory() 메소드를 factoried 객체에 넣을 때 factory() 메소드를 분리 클래스에 넣을 때?
- 12. 어떻게 제네릭을 사용하여이 메서드를 부모 클래스에 넣을 수 있습니까?
- 13. 여러 프로세서에 대한 주석을 Java 클래스에 넣을 수 있습니까?
- 14. 어떻게 SQL 연결을 별도의 클래스에 넣을 수 있습니까? C#
- 15. 클래스에 대한 익명의 javascript 함수 바인딩을 단순화
- 16. PHP5 : 특정 클래스에 대한 함수 액세스 제한
- 17. Visual Studio의 함수/클래스에 대한 문서로 이동
- 18. 클래스에 ArrayList 추가하기 - 클래스는 어떤 역할을합니까?
- 19. 이 코드는 그림 클래스에 어떤 기능을 수행합니까?
- 20. 이름없는 네임 스페이스 내에 함수 선언을 넣을 수 있습니까?
- 21. 'this'키워드는 다른 함수 안에있는 함수 내의 어떤 객체를 참조합니까?
- 22. HTML 속성 값에는 어떤 값을 넣을 수 있습니까?
- 23. C에서 메인 전에 어떤 함수 호출하기
- 24. 함수 프로그래밍이 어떤 종류의 문제에 적합합니까?
- 25. 자바 스크립트에서 어떤 함수/라인 예외를 던지려면
- 26. null datetime을 reportparameter 클래스에 전달합니다!
- 27. 클래스를 유틸리티 클래스로 전달하는 것과 반대로 논리를 클래스에 넣을 수 있습니까?
- 28. 'this'문제 : addEvent 함수 내에서 요소와 클래스에 모두 액세스하려면 어떻게해야합니까?
- 29. tolua ++ : Lua로 내 보낸 C++ 클래스에 루아 함수 추가
- 30. 중첩 템플릿 클래스에 대한 C++ 비 멤버 함수
-1 "당신이 받아 들인다면 ..."... OO 언어를 사용하는 경우 전문적인 환경에서 의도 된대로 사용해야하며 개인의 변덕에 맡겨서는 안됩니다. 이것은 우리가 코딩 공포로 끝나는 방법입니다. – ocodo
당신이 그의 코멘트를 읽는다면 그는 그가 OO 언어를 사용하고 있다고 말하지 않았을 것입니다. 그는 그게 무엇이든간에 더 나은 것을 묻는 중이었습니다. 게다가 C++과 같은 언어는 일상적으로 클래스 멤버가 아닌 함수를 가지고 있습니다. 사람들이 개발에 기울이는 접근법에 대한 나치가되는 것은 객관적인 목적을 제공하지 않습니다. 그래서 그것은 당신에게 2 가지가 잘못되었습니다 ... –
@Jonathan, Godwins 법칙 -1, OP 질문에 사용 된 핵심어 누락. ... "어떤 클래스의 private 변수에 접근"non-OO 언어가 클래스에서 private 변수를 사용하는 것은 무엇입니까? (또는 심지어 교실을 가지고있다!) - 이제, 나는 엉망 (룸)이 행동하는 방식으로 행동하는 OO 시스템조차도 기능에 대한 좋은 사용/이유가 종종 있음을 반대하지 않을 것이다. 그러나 ... 1. 그것은 나에게 더 잘 읽힌다. 2. 나는 그처럼 기분이 좋기 때문에 좋은 이유가 아닙니다. 그러나 더 나쁘다 여전히 3입니다. 왜냐하면 나는 OO 언어로 캡슐화를 포용하고 싶지 않기 때문입니다. – ocodo