OO 소프트웨어 디자인 원칙
-
10-09-2019 - |
문제
나는 다음과 같은 소프트웨어 디자인 원칙의 열렬한 팬입니다. 단단한 그리고 마른. OO 소프트웨어 설계에는 어떤 원칙이 존재합니까?
메모. 나는 "코드 주석"과 같은 답을 찾고있는 것이 아니라 대신 논의 된 것과 같은 oo 디자인 원칙을 찾고 있습니다. 밥 삼촌.
해결책
Wikipedia의 상당히 포괄적 인 목록 :
http://en.wikipedia.org/wiki/list_of_software_development_philosophies
- 민첩한 소프트웨어 개발
- Agile Unified Process (AUP)
- 행동 주도 개발 (BDD)
- 전면의 큰 디자인 (BDUF)
- 브룩스의 법칙
- 성당과 바자회
- 코드 및 수정
- 건설 론자 설계 방법론 (CDM)
- 카우보이 코딩
- 맑은
- 설계 중심 개발 (D3)
- 자신을 반복하지 마십시오 (건조) 또는 한 번만 한 번 (Oaoo), 단일 지점 (스팟)
- 동적 시스템 개발 방법 (DSDM)
- 극단적 인 프로그래밍 (XP)
- 기능 중심 개발
- 할리우드 원리
- 반복적이고 증분 개발
- 공동 응용 프로그램 설계, 일명 JAD 또는 "공동 응용 프로그램 개발"
- 카이젠
- 칸반
- 키스 원칙 (간단하게 유지, 바보)
- 린 소프트웨어 개발
- Microsoft 솔루션 프레임 워크 (MSF)
- 모델 중심 아키텍처 (MDA)
- 오픈 소스
- 열린 통합 프로세스
- 빠르고 더 이상
- 합리적 통합 프로세스 (RUP)
- 스크럼
- 스마트 (민첩한 개발)
- 우려 분리 (Soc)
- 서비스 지향 모델링
- 소프트웨어 장인 정신
- 소프트웨어 시스템 안전
- 나선형 모델
- 시험 중심 개발 (TDD)
- 통합 프로세스 (UP)
- V- 모델
- 폭포 모델
- 바퀴와 스포크 모델
- 더 나쁘다 (MIT 접근법과 대조되는 뉴저지 스타일)
- xtreme
- 당신은 그것을 필요로하지 않을 것입니다 (yagni)
- Zero One Infinity
다른 팁
상속에 대한 구성은 하나입니다.
많은 사람들, 특히 OO에 새로운 사람들은 구성을 사용하는 것이 실제로 필요한 수업을 확장하기 시작합니다. 실제로 당신이 스스로에게 물어봐야한다면, 새로운 클래스 B는 A 클래스 A입니까? 그렇지 않다면 확장해서는 안됩니다.
예를 들어, 내가 있다고 가정 해 봅시다 Person
클래스, a Car
수업, 그리고 나는 DrivenCar
수업. 순진한 구현은 말하는 것입니다 (우리가 여러 상속을 받았다고 가정 해 봅시다)
class DrivenCar extends Person, Car { ... }
Drivencar는 사람의 유형입니까? 아니에요. 사람을 연장해서는 안됩니다. Drivencar는 차입니까? 예, 확장하는 것이 합리적입니다
조성을 사용하여 구현은 모양이 될 것입니다
class DrivenCar extends Car {
private Person driver;
}
그만큼 파악 패턴. 예, 그들은 다소 사소한 것 같습니다. 더 많은 관련 패턴이 보여주는 핵심 특성으로의 증류와 비슷합니다.
상호 작용. 대부분의 설계 패턴은 인터페이스 및 구현의 분리를 기반으로합니다.
API가 성장할 것으로 예상되면 인터페이스 대신 추상 클래스를 사용하십시오. 인터페이스에 새 메소드를 추가하려면 구현하는 모든 클래스를 변경해야합니다.