|
|
(3 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| {{NAVPO}}
| | #REDIRECT [[ist:Classes Internas (Java)]] |
| <!--{{TOCright}}-->
| |
| Na descrição mais simples, uma classe interna não é mais do que uma classe definida dentro de outra, sendo o acesso a ela controlado pela classe externa através das habituais especificações '''public''', '''private''', etc. Ainda nesta abordagem simples, este processo permite definir âmbitos restritos de visibilidade e acesso.
| |
| | |
| Em C++ e para classes internas Java declaradas '''static''', a descrição "simples" é a que realmente é implementada pela linguagem. Nestes casos, serve apenas como processo de organização de código, não havendo necessariamente uma relação entre as classes internas e as externas que as contêm. Embora estes usos tenham utilização, especialmente em C++ (onde são a única possibilidade), não são a forma habitual de definir classes internas em Java.
| |
| | |
| == Classe internas (não "static") em Java ==
| |
| | |
| As classes internas em Java são mais que classes definidas dentro de outras classes. A definição destas classes implica que existe uma relação estreita entre uma classe interna e a externa que a contém. A definição é tal que as instâncias de classes internas têm acesso implícito às instâncias das classes externas, no contento das quais foram criadas. Como se verá abaixo esta ligação é muito importante para os aspectos interessantes da programção utilizando este tipo de abstracções.
| |
| | |
| De modo análogo ao do acesso nos métodos de uma classe, o código de uma classe interna é considerado código da classe externa e pode ser por ela utilizada. Reciprocamente, o código da classe interna tem acesso implícito (directo) ao código e atributos da classe externa, mesmo que esta os tenha definido como '''private'''.
| |
| | |
| A criação de objectos com base em classes internas, na segunda definição, não é sequer possível sem a existência prévia de uma instância da classe externa. Os vários exemplos abaixo ilustram esta questão e introduzem nova formas de escrita (sintaxe) relacionadas com a criação e inicialização ('''new''' e construtores) destes objectos.
| |
| <!-- diagrama da relação UML e instâncias -->
| |
| <!-- exemplo básico -->
| |
| <!-- uso de static e desligar da relação -->
| |
| | |
| ==Organização de código==
| |
| * Organização de interfaces e classes e acesso ao código
| |
| * Classes internas locais (métodos e blocos)
| |
| * Classes anónimas
| |
| | |
| ==Aspectos Básicos==
| |
| * Classes internas e os vários aspectos de definição: classes internas simples; implementação de interfaces
| |
| * Ligação implícita entre objectos de classes internas e a instância da classe externa
| |
| * Partilha de acesso entre classe externa e interna
| |
| * Herança e classes internas e externas
| |
| | |
| ==Exemplos==
| |
| | |
| Estes exemplos ilustram o uso de classes internas, evidenciando vantagens relativamente à ocultação de pormenores de implementação e consequente melhoria na abstracção e organização de código.
| |
| | |
| === Gatos Iteráveis ===
| |
| O exemplo dos gatos iteráveis mostra como iterar um gato constituído por várias partes.
| |
| Começa-se com uma implementação menos elegante e termina-se com a "melhor" implementação.
| |
| | |
| * [[Classes Internas (Java)/Gatos Iteráveis|Gatos Iteráveis]] -- como iterar um gato?
| |
| | |
| === Comparadores em Java ===
| |
| Os exemplos seguintes dizem respeito a interfaces Java.
| |
| | |
| * [[Classes Internas (Java)/Comparações em Java|Comparações em Java]] -- definição de comparadores usando interfaces Java pré-definidas.
| |
| | |
| === Gato e Estômago ===
| |
| Os exemplos apresentados nos vários com um gato e um estômago são semelhantes aos anteriores, mostrando como localizar a definição de uma classe interna junto do código onde é utilizada.
| |
| | |
| * [[Classes Internas (Java)/Gato e Estômago|Gato e Estômago]] -- gatos e estômagos (várias configurações) (exemplo antigo -- ver iteradores acima)
| |
| | |
| === Carros e Motores ===
| |
| Os exemplos de carros e motores apresentam casos em que existe herança, tanto nas classes externas, como nas classes internas e casos mistos.
| |
| Note-se que alguns destes casos não são "normais" e apenas se apresentam para evidenciar consequências relativas à programação com classes internas e herança.
| |
| | |
| * [[Classes Internas (Java)/Carros e Motores|Carros e Motores]] -- aspectos e problemas de herança com carros e motores
| |
| | |
| [[Category:Ensino]]
| |
| [[Category:PO]]
| |
| | |
| == Exercícios ==
| |
| | |
| * [[Classes Internas (Java)/Exercício 01: Interfaces java.lang.Comparable e java.util.Comparator|Exercício 01: Interfaces java.lang.Comparable<T> e java.util.Comparator<T>]]
| |
| | |
| [[category:Ensino]]
| |
| [[category:PO]]
| |
| [[category:Java]]
| |