java composition what is composition java
Este tutorial de composição Java explica o que é composição e agregação em Java e as diferenças entre eles:
Nos últimos dois tutoriais, discutimos a herança em Java em detalhes. Herança em Java é um tipo de relacionamento 'IS-A' que indica que um objeto 'é um tipo de' outro objeto. Por exemplo, um carro é um tipo ou tipo de veículo.
A programação orientada a objetos fornece outro tipo de relacionamento denominado relacionamento “HAS-A”. Neste tutorial, discutiremos o relacionamento tem-um em detalhes.
=> Visite aqui para aprender Java do zero.
O que você aprenderá:
- Tutorial de composição Java
- Associação em Java
- Diferenças entre agregação vs. composição
- Composição vs. Herança
- Conclusão
Tutorial de composição Java
O relacionamento ‘tem um’ em Java é chamado Composição . Ao usar o relacionamento ou composição ‘tem um’, garantimos a reutilização do código em nossos programas.
Então, ao fazer nossos programas usarem o relacionamento ‘tem um’, o que estamos fazendo aqui é que fazemos nosso programa usar uma instância de uma classe diretamente em vez de ‘estendê-la’ de outra classe como fazemos no caso de herança.
O diagrama abaixo representa os relacionamentos ‘é um’ e ‘tem um’ em Java.
Como visto no diagrama acima, Carro e Veículo compartilham a relação ‘IS-A’ como um carro é um veículo. Portanto, criamos um objeto carro a partir do objeto veículo existente, adicionando mais características a ele.
No diagrama, o carro e o motor compartilham a relação ‘Has-a’. Um carro sempre tem um motor. Então, o que fazemos aqui é que não estendemos as propriedades do objeto Engine, mas usamos o objeto Engine diretamente. Isso é feito em Java usando composição.
Conseqüentemente, junto com o encapsulamento, abstração e polimorfismo, herança e composição também são recursos importantes da programação orientada a objetos (OOP).
Os relacionamentos ‘tem um’ geralmente determinam se um determinado objeto tem outro objeto. Portanto, o que fazemos aqui é reutilizar um objeto e, assim, reduzir a duplicação de código e também os erros. Isso ocorre porque usamos um objeto totalmente desenvolvido e testado em nossa classe.
Vamos começar com a discussão de uma relação especial chamada 'Associação' em Java da qual derivamos a composição e outros relacionamentos.
Associação em Java
Associação em Java pode ser definida como uma relação que existe entre duas classes individuais usando seus objetos separados. A associação em Java pode ter os seguintes relacionamentos.
- Um a um: Um objeto associado a exatamente um objeto.
- Um para muitos: Um objeto pode ser associado a vários objetos.
- Muitos para um: Muitos objetos podem ser associados a um objeto.
- Muitos para muitos: Mais de um objeto associado a mais de um outro objeto.
Quando um relacionamento é estabelecido, os objetos contidos (objetos que têm outros objetos como seus membros) se comunicam com o objeto contido para reutilizar suas propriedades e características. A associação tem duas formas, ou seja, composição e agregação.
A figura abaixo mostra isso:
Conforme visto no diagrama acima, a Associação inclui Composição e agregação. Composição é um termo mais específico e agregação é mais geral do que composição. Esses formulários são baseados no tipo de relacionamento que eles oferecem.
Antes de prosseguirmos para a composição e agregação, vamos implementar um programa Java para demonstrar a associação em Java.
import java.io.*; // class Account class Account { private String bank_name; private long Account_number; // initialize bank name and account number Account(String bank_name, long Account_number) { this.bank_name = bank_name; this.Account_number = Account_number; } //read bank name public String getBankName() { returnthis.bank_name; } //read account number public long getAccountNumber() { returnthis.Account_number; } } // employee class class Employee { private String emp_name; // initialize employee name Employee(String emp_name) { this.emp_name = emp_name; } //read employee name public String getEmployeeName() { return this.emp_name; } } // Associate both the classes class Main { public static void main (String() args) { Employee emp = new Employee('Andrew'); Account acc = new Account('Citi Bank', 13319); System.out.println(emp.getEmployeeName() + ' has an account with ' + acc.getBankName() + ' with Account Number:' + acc.getAccountNumber()); } }
Resultado:
O programa acima demonstra uma associação em Java. Aqui, temos uma conta de classe que tem um nome de banco e um número de conta como membros privados. Em seguida, temos uma classe Employee. Sabemos que cada funcionário terá um número de conta para depositar o salário etc.
Então o que fazemos é, em vez de escrever outra classe ou método para ler os detalhes da conta bancária do funcionário, reutilizamos diretamente a classe Conta existente. Em outras palavras, associamos um objeto Conta ao Funcionário para obter os detalhes da conta bancária do Funcionário. O exemplo acima faz exatamente isso.
Composição em Java
A composição é uma forma de associação. A composição pode ser definida como uma associação na qual uma classe contém outra classe e esta classe contida depende da classe contida de tal forma que não pode existir independentemente.
Vimos um exemplo de relacionamento tem-um acima. Nela, tínhamos um objeto carro que tem um motor. Este é um exemplo de composição. Nesse sentido, um motor não pode existir independentemente sem um carro.
A composição é mais restrita quando comparada à Agregação. A composição não é um recurso Java. É principalmente considerada uma técnica de design.
O diagrama a seguir mostra um exemplo de composição.
qual é o melhor downloader de música grátis para Android
Nesse caso, um Funcionário possui uma conta bancária. Sabemos que uma conta bancária não pode existir sem um titular. Sem um titular de conta, fica adormecido.
Podemos usar composição para modelar objetos que têm outros objetos como seus membros e esses objetos têm uma relação 'tem-a' entre si.
Na composição, um objeto está contido em outro objeto, portanto, quando o objeto que o contém é destruído; o outro objeto também é destruído
Portanto, podemos ver a relação de composição como uma relação 'parte de um todo' em que o papel não existe sem o inteira . Portanto, quando o todo é destruído, a parte também é excluída. Isso significa que o todo tem uma relação mais forte com a parte.
Exemplo de composição Java
A seguir está o programa para demonstrar a composição.
O sistema que usamos aqui é representado abaixo.
Portanto, neste programa, temos três classes, conforme mostrado acima. Honda é um carro, então se estende da classe Carro. O objeto CarEngine é usado na classe Honda.
O programa é fornecido abaixo.
class CarEngine { public void startEngine(){ System.out.println('Car Engine Started.'); } public void stopEngine(){ System.out.println('Car Engine Stopped.'); } } class Car { private String color; private int max_Speed; public void carDetails(){ System.out.println('Car Color= '+color + '; Max Speed= ' + max_Speed); } //set car color public void setColor(String color) { this.color = color; } //set car max_Speed public void setMaxSpeed(int max_Speed) { this.max_Speed = max_Speed; } } class Honda extends Car{ public void HondaStart(){ CarEngine Honda_Engine = new CarEngine(); //composition Honda_Engine.startEngine(); } } public class Main { public static void main(String() args) { Honda HondaCity = new Honda(); HondaCity.setColor('Silver'); HondaCity.setMaxSpeed(180); HondaCity.carDetails(); HondaCity.HondaStart(); } }
Resultado:
Portanto, a saída mostra as propriedades dos carros Honda. Ele também mostra a saída de um método da classe CarEngine que usamos como membro da classe Honda usando composição.
Este programa mostrou como podemos usar composição em um programa Java.
Agregação em Java
Agregação é outra forma de associação em Java. Mas, no caso de agregação, ela só permite o relacionamento unilateral entre os objetos. Por exemplo, um funcionário tem um endereço residencial. Mas vice-versa, o endereço residencial tem funcionários, não parece certo.
Da mesma forma, um aluno tem um endereço, mas 'o endereço tem um aluno' não faz sentido. Assim como a composição, a agregação também representa o relacionamento “tem um”. Isso significa que uma classe contém um objeto de outra classe.
o que c ++ faz
O diagrama abaixo representa um exemplo de agregação.
O exemplo acima pode ser interpretado como o Colégio tem funcionários e alunos.
Então, quando exatamente devemos escolher a agregação?
Devemos usar agregação quando não houver necessidade de usar um relacionamento ou herança 'é um'. Se pudermos manter o relacionamento 'é um' durante todo o aplicativo ou vida útil de um objeto, então podemos implementar herança para reutilização de código.
Caso contrário, é melhor usar agregação para reutilização de código. Vamos agora implementar um exemplo de agregação em Java.
O sistema de exemplo que usamos é o seguinte:
Aqui temos uma aula de ‘Instituto’. O instituto pode ter vários departamentos ou filiais. Cada filial, por sua vez, tem vários alunos. Neste programa, contaremos o número total de alunos de todo o instituto. Usamos agregação para este propósito. A classe Institute contém o objeto Branch.
O objeto de ramificação possui um objeto de aluno. Portanto, na classe Institute usando o objeto Branch, contamos o número total de alunos. Para isso, usamos uma lista de ramos de um instituto.
O programa Java é fornecido abaixo.
import java.io.*; import java.util.*; // Class Student class Student { String student_name; int student_id ; String student_dept; //Initialize Student class members Student(String student_name, int student_id, String student_dept) { this.student_name = student_name; this.student_id = student_id; this.student_dept = student_dept; } } //Branch class indiates the branch or department to which the student belongs class Branch { String Branch_name; private List students; //Each branch contain students //Initialize class members Branch(String Branch_name, List students) { this.Branch_name = Branch_name; this.students = students; } //return list of students public List getStudents() { return students; } } //Institure class contains branches which in turn have students class Institute { String instituteName; private List branches; //each institure have various branches //initialize members Institute(String instituteName, List branches) { this.instituteName = instituteName; this.branches = branches; } // count and return number of all students in the institute public int getAllStudentsInInstitute() { int noOfStudents = 0; List students; for(Branch branch : branches) { students = branch.getStudents(); for(Student s : students) { noOfStudents++; } } return noOfStudents; } } //Aggregate all the classes=> Institute (contains) branches (contains) Students class Main { public static void main (String() args) { //declare student objects Student s1 = new Student('Megan', 1, 'CSE'); Student s2 = new Student('Mia', 2, 'CSE'); Student s3 = new Student('John', 1, 'ETC'); Student s4 = new Student('Finn', 2, 'ETC'); // List of CSE Students. List cse_students = new ArrayList(); cse_students.add(s1); cse_students.add(s2); //List of ETC Students List etc_students = new ArrayList(); etc_students.add(s3); etc_students.add(s4); //declare Branch objects Branch CSE = new Branch('CSE', cse_students); Branch ETC = new Branch('ETC', etc_students); //make list of branches List branches = new ArrayList(); branches.add(CSE); branches.add(ETC); // creating an object of Institute. Institute institute = new Institute('NIT', branches); //display total number of students System.out.print('Total students in NIT institute: '); System.out.print(institute.getAllStudentsInInstitute()); } }
Resultado:
Portanto, agregação e composição são duas formas de associação que discutimos aqui. Quando não precisamos ou não podemos representar a relação 'é um' entre os objetos, podemos ir para a composição se quisermos uma relação mais forte entre os objetos ou agregação se quisermos uma relação unilateral.
Tanto a agregação quanto a composição nos ajudam a reutilizar o código em Java.
Diferenças entre agregação vs. composição
Tanto a Composição quanto a Agregação são partes da Associação que retratam um relacionamento 'tem-a'. Ambas as técnicas não são recursos Java e não têm uma forma direta de implementação, mas podem ser implementadas usando código Java.
A composição e a agregação nos permitem reutilizar o código. A capacidade de reutilização do código reduz os bugs no código e também torna o aplicativo mais estável.
Listados abaixo estão algumas diferenças entre agregação e composição.
Agregação | Composição |
---|---|
A agregação permite que objetos filho ou objetos contidos existam independentemente. Por exemplo em um relacionamento em que a Escola tem Funcionários, se excluirmos Escola, os Funcionários permanecerão e poderão funcionar por conta própria. | Na composição, o objeto contido não pode existir independentemente. Por exemplo um carro tem motor. Se excluirmos Car, a classe Engine não funcionará sozinha. |
Agregação é um relacionamento 'tem um'. | A composição é uma forma de relacionamento 'tem uma', mas vista como parte de um todo. |
A agregação tem uma associação apenas. | A composição permite outras relações fornecidas na associação. |
A agregação tem uma associação fraca entre objetos. | A composição possui forte associação entre objetos. |
Composição vs. Herança
Composição | Herança |
---|---|
A composição retrata a relação 'Has-A'. | Herança representa o relacionamento 'Is-A'. |
Mais fácil de alterar a implementação de objetos contidos. | Quando uma implementação muda, toda a hierarquia de herança muda. |
Tem uma vinculação dinâmica ou de tempo de execução. | Tem uma vinculação estática ou de tempo de compilação. |
A interface da classe de front-end pode ser alterada facilmente, sem afetar as classes de back-end. | Quaisquer mudanças nos métodos ou protótipos afetam todas as classes. |
A composição é usada quando não precisamos adicionar mais características ou recursos a um objeto existente. | A herança é usada quando mais recursos devem ser adicionados às classes herdadas. |
perguntas frequentes
P # 1) Qual é a diferença entre o relacionamento ‘IS - A’ e ‘HAS - A’?
Responda: Na programação orientada a objetos, as relações IS-A representam a herança em que uma classe filha 'é uma espécie de' uma classe pai. O relacionamento tem-um é um relacionamento 'parte de um todo', que é representado por composição e agregação. Herança é uma ligação estática, enquanto Composição é uma ligação dinâmica.
P # 2) O que é agregação e composição em Java?
Responda: Na composição, os dois objetos são fortemente acoplados, ou seja, quando o objeto (objeto contendo) que possui outro objeto (objeto contido) é destruído, o outro objeto é automaticamente destruído, pois não pode funcionar independentemente por conta própria.
Na agregação, o objeto contido e o objeto contido podem funcionar independentemente. Isso ocorre porque, na agregação, um objeto usa outro objeto.
Q # 3) Por que usamos composição em Java?
Responda: A composição nos permite reutilizar o código existente, reduzindo assim a complexidade do código e também reduzindo os bugs no código. Usando a composição, podemos reutilizar apenas o que precisamos do objeto e também controlar sua visibilidade.
P # 4) Qual é o uso de Associação?
Responda: Associação representa o relacionamento ‘tem um’ em Java. A associação em Java é usada quando um objeto precisa usar a funcionalidade e os serviços de outro objeto. Composição e agregação são duas formas de associação.
P # 5) A composição é melhor do que a herança?
Responda: Depende do sistema OOP que estamos codificando. Se pudermos representar os objetos com relacionamento IS-A ao longo de seu tempo de vida no aplicativo, então a herança é uma opção melhor. Quando queremos reutilizar o código e não podemos representar o sistema de objetos com o relacionamento IS-A, a composição é melhor.
Além disso, quando queremos mudar frequentemente as classes de front-end sem perturbar as classes de back-end, a composição é melhor porque, no caso de herança, pequenas mudanças afetam principalmente toda a hierarquia de herança.
Conclusão
Neste tutorial, discutimos o relacionamento HAS-A em Java. Composição e agregação são as formas que implementam o relacionamento ‘HAS-A’. Comparamos essas duas implementações.
Embora ambos contenham objetos de outra classe, a composição possui o objeto, enquanto a agregação simplesmente usa o objeto. Também comparamos a composição e a herança em Java.
=> Verifique aqui para ver A-Z dos tutoriais de treinamento Java.
Leitura recomendada
- Tutorial Java SWING: Container, Componentes e Manipulação de Eventos
- Tutorial de JAVA para iniciantes: mais de 100 tutoriais práticos em vídeo Java
- TreeMap em Java - Tutorial com exemplos de TreeMap em Java
- Tutorial de Java Float com exemplos de programação
- Tutorial Java String com String Buffer e String Builder
- Implantação Java: Criação e execução de arquivo JAR Java
- Java Class Vs Object - Como usar classe e objeto em Java
- Java Basics: Java Syntax, Java Class e Core Java Concepts