2010-01-16 4 views
3

이 질문은 프로젝트 설계와 관련이 있습니다. 이 프로젝트는 전기 시스템을 채택하고 프로그래밍 방식으로 기능을 정의합니다. 이제는 시스템을 정의하는 데 심오한 생각이 들었으므로 시스템이 적절하게 구성되도록하는 많은 양의 상호 작용을 통합하려고합니다. 예 : 특정 이벤트가 발생하면 전기 접촉기가 열리고 닫힙니다. 이 시스템은 항공기에 탑재되어 있기 때문에 항공/지상 논리를 사용하므로 위치에 따라 두 가지 동작이 통합됩니다.기계 시스템 기능을 정의하기위한 설계 전략 조언

나는이 응용 프로그램에 포함 된 복잡성의 수준을 보여주기 위해이 설명을 모두 제공합니다. 필자는 설계를 계속하면서이 전기 시스템에서 적절한 구성을 외삽하는 수단으로 if/else 구문을 사용했습니다. 그러나 더 깊게 코딩하면 if/else 구문이 더 많이 필요합니다. 나는이 시스템을 비효율적으로 프로그래밍하고있는 시점에 도달했다고 느낍니다.

전에 이와 같은 프로젝트를 수행 한 사람들에게 다음과 같이 묻습니다. 잘 알려진 경로를 따라 잡을 수 있습니까? (발생할 수있는 가능한 모든 시나리오를 정의 할 때) 나는 계속해서 인내해야합니다. 실제 시스템의 동작을 정의하는 작업을 수행하기위한 몇 가지 다른 전략.

이 시점에서 대리인을 사용하는 데 경험이 거의 없지만 끝이없는 if/else 블록 대신 시나리오를 확인하기 위해 일부 관찰자 또는 기타 "코코아 - ey"장점을 활용할 수 있는지 궁금합니다.

답변

1

실제 시스템을 모델링하려고하기 때문에 is-a 및 has-a 관계를 잘 정의하고 구식 객체 지향 디자인을 적용하여 깨는 것에 적용하는 구체적인 객체 지향 디자인을 만드는 것이 좋습니다. 실세계 시스템은 기능적으로 분해된다.

일반 사례를 처리하는 프로토콜을 정의하고 특정 사례에서 사용하는 것이 좋습니다.

예를 들어, ElectricalEvent 프로토콜을 준수하는 많은 유형의 이벤트를 가질 수 있으며 유형에 따라 ElectricalContactor가 isEntryClass 선택자를 사용하여 GeneralElectricEvent 대 SpecializedElectricEvent를 구별하는 방법을보다 잘 결정할 수 있습니다.

0

모든 상태를 미리 정의 할 수 있다면 이것을 finite state machine으로 구현하는 것이 가장 좋습니다. 이를 통해 상태 의존 논리를 한 곳에서 명확하게 정의 할 수 있습니다.

당신이 수를 구현하는 오브젝티브 C에 대한 상태 머신 코드를 생성 할 수 있습니다 :

당신이 들여다 수있는 몇 가지 구현이 있습니다 또한 자신에게 맞는 맞춤식 구현 도구를 사용하십시오.