«object-oriented-design» 태그된 질문

객체 지향 디자인은 소프트웨어 문제를 해결하기 위해 객체 상호 작용 시스템을 계획하는 프로세스입니다.

3
순환 의존성을 해결하는 방법?
서로 순환 의존하는 세 가지 클래스가 있습니다. TestExecuter는 TestScenario의 요청을 실행하고 ReportGenerator 클래스를 사용하여 보고서 파일을 저장합니다. 그래서: TestExecuter는 ReportGenerator를 사용하여 보고서를 생성합니다. ReportGenerator는 TestScenario 및 TestExecuter에서 설정 한 매개 변수에 따라 다릅니다. TestScenario는 TestExecuter에 따라 다릅니다. 해당 종속성을 제거하는 방법을 알 수 없습니다. public class TestExecuter { ReportGenerator reportGenerator; …

2
확장 가능한 알림 시스템을 설계하는 방법은 무엇입니까? [닫은]
알림 시스템 관리자를 작성해야합니다. 내 요구 사항은 다음과 같습니다. 완전히 다른 플랫폼에서 알림을 보낼 수 있어야합니다 (예를 들어 SMS 또는 전자 메일을 보낼 수 있어야 함). 때때로 알림은 특정 플랫폼의 모든 수신자에게 동일 할 수 있지만 때로는 플랫폼 당 수신자 (또는 여러 명) 당 알림 일 수 있습니다. 각 알림에는 …

7
나중에 사용하기 위해 루프에 플래그를 설정하는 것이 코드 냄새입니까?
특정 조건이 true가 될 때까지 맵을 반복 한 다음 나중에 해당 조건을 사용하여 더 많은 작업을 수행하는 코드가 있습니다. 예: Map<BigInteger, List<String>> map = handler.getMap(); if(map != null && !map.isEmpty()) { for (Map.Entry<BigInteger, List<String>> entry : map.entrySet()) { fillUpList(); if(list.size() > limit) { limitFlag = true; break; } } } …

3
"시작", "실행"또는 "실행"방법이 모범 사례입니까?
현재 Start 메서드를 구현하는 많은 클래스가있는 코드베이스에서 작업하고 있습니다. 이것은 나에게 2 단계 구조처럼 보이지만, 항상 나쁜 습관으로 간주했습니다. 이것과 생성자의 차이점을 알 수 없습니다. 일반적인 객체 구성 대신 시작 방법을 사용하는 것이 언제 적절한가요? 언제 생성자를 사용해야합니까? 편집 : 관련성이 없다고 생각하지만 프로그래밍 언어는 C #이며 Java 또는 C …

10
함수형 프로그래밍 제안자는 Code Complete에서이 문장에 어떻게 대답합니까?
Steve McConnell은 두 번째 버전의 839 페이지에서 프로그래머가 대규모 프로그램에서 "복잡성을 극복 할 수있는"모든 방법을 논의하고 있습니다. 그의 조언은이 진술로 끝납니다. "객체 지향 프로그래밍은 알고리즘과 데이터에 동시에 적용되는 추상화 수준을 제공합니다. 이는 기능 분해만으로는 제공하지 않는 일종의 추상화입니다." "복잡성을 줄이는 것이 효과적인 프로그래머가되기위한 가장 중요한 열쇠"(동일한 페이지)라는 결론과 함께, 이것은 …

17
추상화를 통해 세부 사항을 숨기면 어떤 가치가 있습니까? 투명성에 가치가 없습니까?
배경 나는 큰 추상화 팬이 아닙니다. 나는 인터페이스 등의 적응성, 이식성 및 재사용 성으로부터 이익을 얻을 수 있음을 인정할 것이다. 거기에는 실질적인 이점이있다. 그리고 나는 그것을 의심하고 싶지 않으므로 무시하자. 추상화의 다른 주요 "혜택"이 있는데,이 추상화의 사용자로부터 구현 로직과 세부 사항을 숨기는 것입니다. 논쟁은 당신이 세부 사항을 알 필요가 없으며이 …

10
추상 클래스의 인터페이스
동료와 기본 클래스와 인터페이스의 관계에 대한 의견이 다릅니다. 인터페이스 구현이 필요할 때 해당 클래스를 사용할 수 없다면 클래스가 인터페이스를 구현해서는 안된다고 생각합니다. 즉, 다음과 같은 코드를보고 싶습니다. interface IFooWorker { void Work(); } abstract class BaseWorker { ... base class behaviors ... public abstract void Work() { } protected string …

3
TDD에서 재 설계 한 후 해당 메소드가 비공개가되면 메소드 테스트는 어떻게됩니까?
다른 캐릭터와 그 종류의 물건을 공격하는 캐릭터로 롤 게임을 시작한다고 가정 해 봅시다. TDD를 적용하여 Character.receiveAttack(Int)메서드 내부의 논리를 테스트하기 위해 테스트 사례를 만듭니다 . 이 같은: @Test fun healthIsReducedWhenCharacterIsAttacked() { val c = Character(100) //arg is the health c.receiveAttack(50) //arg is the suffered attack damage assertThat(c.health, is(50)); } 10 가지 …

4
C # 6.0의 새로운 Null 조건부 연산자는 Demeter of Laws에 적용됩니까?
데메테르 의 법칙은 다음과 같이 말합니다. 각 장치에는 다른 장치에 대한 정보가 제한적이어야합니다. 현재 장치와 "가까운"장치 만 있습니다. 각 부대는 친구들과 만 대화해야합니다. 낯선 사람과 이야기하지 마십시오. 가까운 친구와 만 대화하십시오. C # 6.0은 null 조건부 연산자 라는 새로운 연산자를 도입했습니다 . IMHO, 코딩이 쉬워지고 가독성이 향상됩니다. 그러나 클래스 필드를 …

6
class 키워드없이 "객체 지향"프로그래밍을 구현할 수 있습니까?
은행에서 "계정"을 추상화하고 싶다고 가정 해 봅시다. 다음 function은 파이썬 에서 객체를 사용하는 한 가지 방법입니다 . def account(): """Return a dispatch dictionary representing a bank account. >>> a = account() >>> a['deposit'](100) 100 >>> a['withdraw'](90) 10 >>> a['withdraw'](90) 'Insufficient funds' >>> a['balance'] 10 """ def withdraw(amount): if amount > …

6
플래그를 확인할 필요가없는 디자인 패턴이 있습니까?
데이터베이스에 문자열 페이로드를 저장하겠습니다. 두 가지 전역 구성이 있습니다. 암호화 압축 이들 중 하나만 활성화되거나 둘 다 활성화되거나 비활성화되는 방식으로 구성을 사용하여 활성화 또는 비활성화 할 수 있습니다. 내 현재 구현은 다음과 같습니다. if (encryptionEnable && !compressEnable) { encrypt(data); } else if (!encryptionEnable && compressEnable) { compress(data); } else if …

7
함수형 프로그래밍은 "시스템을 모듈로 분해하는 데 사용되는 기준"(데이터 숨기기)의 이점을 무시합니까?
방금 처음으로 읽은 시스템을 모듈로 분해하는 데 사용되는 기준에 관한 고전 기사가 있습니다 . 그것은 나에게 완벽하게 이해되며 아마도 OOP가 기반으로 한 기사 중 하나 일 것입니다. 결론 : 이러한 예를 통해 플로우 차트를 기반으로 시스템을 모듈로 분해하는 것이 거의 항상 올바르지 않음을 보여 주려고 시도했습니다. ... 그런 다음 각 …

9
Liskov 대체 원칙을 위반하면 무엇이 잘못 될 수 있습니까?
나는 Liskov 대체 원칙에 대한 위반 가능성에 대해이 매우 투표가 많은 질문 을 따랐습니다. 나는 Liskov 대체 원칙이 무엇인지 알고 있지만, 여전히 내 마음에 분명하지 않은 것은 개발자가 객체 지향 코드를 작성하는 동안 원칙에 대해 생각하지 않으면 잘못 될 수 있다는 것입니다.

4
프로토 타입 상속은 클래식 상속과 실제로 어떻게 다른가요?
상속, 다형성 및 캡슐화는 OOP의 가장 뚜렷하고 중요한 세 가지 기능이며, 그로부터 상속은 요즘 높은 사용 통계를 가지고 있습니다. 저는 JavaScript를 배우고 있으며 여기에서 모두 프로토 타입 상속이 있다고 말하고 모든 사람들 이 클래식 상속 과 는 전혀 다르다고 말합니다 . 그러나 실제 사용 시점과의 차이점이 무엇인지 이해할 수 없습니까? …

3
객체 지향 분석 및 디자인 (OOAD)을 잘 활용하는 방법
좋은 분석기와 디자이너가되면 개발자에게 큰 도움이됩니다. 그러나 이것에는 분명히 장애물이 있습니다. 모든 사람이 OOAD에 관심이있는 것은 아니며 관심있는 모든 사람이 그 길을 알고있는 것은 아닙니다. 좋은 OOAD가 여러 OO 언어를 알아야합니까? 아니면 프로젝트에 실패했을까요? 어떻게 좋은 OOAD가 될 수 있습니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.