찾다
Javajava지도 시간Java의 구성, 집계 및 재사용 원칙에 대한 자세한 그래픽 설명

이 글은 주로 합성, 집합, 재사용의 원리를 소개하는 내용인데, 편집자는 꽤 좋다고 생각해서 지금부터 공유하고 참고하겠습니다. 편집자를 따라가서 살펴보자

구성, 집합 및 재사용 원칙

구성 및 재사용 원칙을 CARP(구성/집계 재사용 원칙)라고도 하며 그 정의는 다음과 같습니다.

복합 재사용 원칙(CRP): 재사용을 위해 상속 대신 개체 조합을 사용해 보세요.

합성 및 재사용의 원칙은 연관 관계(조합 관계 및 집계 관계 포함)를 통해 새 개체의 일부 기존 개체를 사용하여 새 개체의 일부로 만드는 것입니다. 위임 방법을 통해 기존 개체를 호출합니다. 기능을 재사용하는 목적. 간단히 말해서: 재사용 시 조합/집계 관계(연관 관계)를 사용하고 상속을 덜 사용하도록 노력하세요.

객체 지향 설계에서는 구성/집계 관계 또는 상속을 통해 두 가지 방법으로 다양한 환경에서 기존 설계 및 구현을 재사용할 수 있지만 먼저 구성/집계, 구성/집계 사용을 고려해야 합니다. 시스템이 더 유연해지고 클래스 간의 결합이 줄어듭니다. 상속은 다음으로 고려되어야 합니다. 상속을 사용하는 경우에는 Liskov 대체 원칙을 엄격하게 따라야 합니다. 문제를 이해하고 복잡성을 줄이는 데 도움이 되는 반면, 상속을 남용하면 시스템 구축 및 유지 관리의 어려움과 시스템의 복잡성이 증가하므로 상속 재사용은 주의해서 사용해야 합니다.

상속을 통한 재사용의 주요 문제점은 상속 재사용이 시스템의 캡슐화를 파괴한다는 것입니다. 왜냐하면 상속은 기본 클래스의 구현 세부사항을 서브클래스에 노출시키기 때문입니다. 왜냐하면 기본 클래스의 내부 세부사항은 일반적으로 서브클래스에서 볼 수 있기 때문입니다. 따라서 이러한 종류의 재사용을 "화이트 박스" 재사용이라고도 합니다. 기본 클래스가 변경되면 하위 클래스의 구현도 변경되어야 하며 기본 클래스에서 상속된 구현은 정적이므로 런타임 변경 시 변경할 수 없습니다. , 유연성이 충분하지 않으며 상속은 제한된 상황(예: 상속되지 않는 것으로 선언되지 않은 클래스)에서만 사용할 수 있습니다.

Extension

상속에 대한 심층적인 이해를 위해서는 "Software Architecture Design"이라는 책의 저자인 Mr. Wen Yu의 글을 참조하세요. 상속" .

조합 또는 집계 관계는 기존 개체(구성원 개체라고도 함)를 새 개체에 통합하여 새 개체의 일부로 만들 수 있으므로 새 개체는 기존 개체의 기능을 호출할 수 있습니다. 구성원 객체는 새 객체에 표시되지 않으므로 이러한 종류의 재사용을 "블랙박스" 재사용이라고도 합니다. 상속 관계에 비해 결합 정도가 상대적으로 낮고 구성원 객체의 변경 사항이 새 객체에 거의 영향을 미치지 않습니다. 멤버 개체의 작업은 실제 필요에 따라 새 개체에서 선택적으로 호출될 수 있습니다. 합성 재사용은 런타임에 동적으로 수행될 수 있으며 새 개체는 멤버 개체와 동일한 유형의 다른 개체를 동적으로 참조할 수 있습니다.

일반적으로 두 클래스 간의 관계가 "Has-A"인 경우 합성 또는 집합을 사용해야 하고 관계가 "Is-A"인 경우 상속 을 사용할 수 있습니다. "Is-A"는 엄격한 분류학적 정의입니다. 즉, 한 클래스가 다른 클래스의 "일종"이라는 의미입니다. "Has-A"는 다릅니다. 이는 특정 역할에 특정 책임이 있음을 의미합니다.

다음은 합성과 재사용의 원리에 대한 이해를 깊게 하기 위한 간단한 예입니다.

CRM 시스템의 초기 설계에서 Sunny Software Company의 개발자들은 고객 수가 많지 않으며 시스템은 데이터베이스 작업과 관련된 데이터베이스로 MySQL을 사용했습니다. CustomerDAO 클래스와 같은 클래스는 데이터베이스에 연결해야 합니다. getConnection() 메서드 이후 데이터베이스에 연결하기 위한 메서드가 캡슐화됩니다. DBUtil 클래스를 재사용해야 하기 때문에 디자이너는 CustomerDAO를 DBUtil 클래스의 하위 클래스로 사용합니다. 초기 디자인 구조 그림 1에 표시된 대로:

그림 1 초기 디자인 계획 구조 다이어그램

고객 수에 따라 시스템은 Oracle 데이터베이스로 업그레이드하기로 결정했으므로 Oracle 데이터베이스에 연결하려면 새로운 OracleDBUtil 클래스를 추가해야 합니다. 따라서 초기 설계 계획에서는 CustomerDAO와 DBUtil 간에 상속 관계가 있습니다. 데이터베이스 연결 방법을 변경하려면 CustomerDAO 클래스의 소스 코드를 수정하고 CustomerDAO를 OracleDBUtil의 하위 클래스로 사용해야 합니다. 이는 열기 및 닫기 원칙에 위배됩니다. [물론 DBUtil 클래스의 소스 코드를 수정할 수도 있는데, 이는 열기 및 닫기 원칙에도 위배됩니다. ]

이제 합성과 재사용의 원리를 이용해 재구성됩니다.

합성 재사용의 원칙에 따라 재사용을 구현할 때 더 많은 연관을 사용하고 더 적은 상속을 사용해야 합니다. 따라서 이 예에서는 연관 재사용을 사용하여 상속 재사용을 대체할 수 있습니다. 재구성된 구조는 그림 2에 나와 있습니다.

그림 2 재구성된 구조 다이어그램

그림 2에서는 CustomerDAO와 DBUtil의 관계가 상속에서 연관으로 변경됩니다. 종속성 주입은 DBUtil 개체를 CustomerDAO에 주입하는 데 사용됩니다. DBUtil의 기능을 확장해야 하는 경우 하위 클래스 OracleDBUtil을 통해 Oracle 데이터베이스에 연결하는 등 해당 하위 클래스를 통해 확장할 수 있습니다. CustomerDAO는 Liskov 대체 원칙에 따라 DBUtil용으로 프로그래밍되었으므로 DBUtil 하위 클래스의 개체는 DBUtil 개체를 덮어쓸 수 있으며 하위 클래스에서 확장된 메서드를 사용하려면 하위 클래스 개체를 CustomerDAO에 삽입하기만 하면 됩니다. 예를 들어, OracleDBUtil 개체를 CustomerDAO에 주입하면 Oracle 데이터베이스 연결을 실현할 수 있으며 원본 코드를 수정할 필요가 없으며 새로운 데이터베이스 연결 방법을 유연하게 추가할 수 있습니다.

위 내용은 Java의 구성, 집계 및 재사용 원칙에 대한 자세한 그래픽 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
带你搞懂Java结构化数据处理开源库SPL带你搞懂Java结构化数据处理开源库SPLMay 24, 2022 pm 01:34 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

Java集合框架之PriorityQueue优先级队列Java集合框架之PriorityQueue优先级队列Jun 09, 2022 am 11:47 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

完全掌握Java锁(图文解析)完全掌握Java锁(图文解析)Jun 14, 2022 am 11:47 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

一起聊聊Java多线程之线程安全问题一起聊聊Java多线程之线程安全问题Apr 21, 2022 pm 06:17 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

详细解析Java的this和super关键字详细解析Java的this和super关键字Apr 30, 2022 am 09:00 AM

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

Java基础归纳之枚举Java基础归纳之枚举May 26, 2022 am 11:50 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

java中封装是什么java中封装是什么May 16, 2019 pm 06:08 PM

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。

归纳整理JAVA装饰器模式(实例详解)归纳整理JAVA装饰器模式(实例详解)May 05, 2022 pm 06:48 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于设计模式的相关问题,主要将装饰器模式的相关内容,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式,希望对大家有帮助。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전