Fundamentos de POO, Interfaces, Exceções e GUI em Java
Classificado em Computação
Escrito em em
português com um tamanho de 10,85 KB
PARTE I: Conceitos Fundamentais da Orientação a Objetos (POO)
Paradigma é um conjunto de regras que estabelecem fronteiras e descrevem como resolver os problemas dentro destas fronteiras.
Um programa orientado a objetos é estruturado como uma comunidade de agentes que interagem entre si, denominados objetos. Cada objeto tem um papel a cumprir. Cada objeto oferece um serviço ou realiza uma ação que é usada por outros membros da comunidade, fazendo assim uma colaboração para que um resultado seja alcançado. Na programação orientada a objetos, a sequência das operações depende da necessidade do usuário, podendo ser completamente diferente em diferentes execuções de um mesmo programa.
Princípios Fundamentais da POO
- Abstração - ignorar aspectos irrelevantes e se concentrar nos principais;
- Encapsulamento - oculta a visão interna de como um objeto faz suas responsabilidades (implementação);
- Modularidade - decompor um sistema em módulos, agrupando lógicas relacionadas, facilitando o reuso e a manutenção;
- Hierarquia - organizar abstrações e simplificar o entendimento do problema. Na herança, serve para organizar melhor objetos semelhantes que possuem propriedades em comum (reaproveitamento de algo previamente desenvolvido). Generalização é agrupar as propriedades mais comuns de uma hierarquia na superclasse, enquanto Especialização é separar as propriedades exclusivas da hierarquia nas subclasses.
Interface e Implementação
Aspectos externos (o que faz) - interface, contrato.
Aspectos internos (como faz) - implementação.
Classes e Objetos
Classes são estruturas que contêm definições de atributos gerais sobre um tema, além de possíveis operações (métodos) a serem realizadas por estas características.
Objetos são dados definidos a partir de uma classe. São chamados de instâncias de classes, podendo existir várias instâncias de uma mesma classe.
Método Construtor
Método Construtor é um método com o mesmo nome da classe, sendo invocado toda vez que um objeto instancia essa classe. Os atributos desta instância são normalmente inicializados com valores default (0 para tipos primitivos numéricos, false para booleanos e null para Strings). É muito comum ocorrer a sobrecarga de construtores, possibilitando diferentes maneiras de inicializar objetos de uma classe.
Gets e Sets
Gets e Sets são comandos usados para encapsular os atributos de uma classe, determinando uma verificação de conteúdo do atributo (get) para depois haver a atribuição de um novo conteúdo (set).
Polimorfismo
Polimorfismo é utilizar o mesmo método (mesma assinatura) de formas diferentes (implementação diferente), de acordo com a classe onde foi definido (pode reaproveitar informações de outras classes caso esteja em uma relação de herança). Um tipo especial de polimorfismo é a Sobrecarga, que, além de implementação diferente, possui uma lista de parâmetros diferente e ambos os métodos estão na mesma classe.
Visibilidade (Modificadores de Acesso)
A visibilidade indica por quem uma determinada propriedade pode ser utilizada:
+oupublic: A propriedade será vista e usada dentro da classe que foi declarada, em qualquer elemento externo e nas classes descendentes.#ouprotected: A propriedade será vista e usada apenas dentro da classe na qual foi declarada e pelas classes descendentes.-ouprivate: A propriedade será vista e usada apenas dentro da classe na qual foi declarada.~oupackage: A propriedade poderá ser vista e usada por elementos que estejam declarados dentro do mesmo pacote no qual a classe está inserida.
Multiplicidade em Relacionamentos
A Multiplicidade define a quantidade de instâncias possíveis em um relacionamento:
0..1(valor opcional)1ou1..1(exatamente um)*ou0..*(qualquer valor inteiro não-negativo)1..*(qualquer valor inteiro positivo)
Escopo (Estático/Static)
O Escopo (representado por $ em alguns diagramas, indicando o modificador static) determina se a propriedade poderá ser acessada somente a partir das instâncias da classe ou diretamente da classe sem a existência de uma instância. Propriedades estáticas (de classe) terão sempre um único valor, independente do número de instâncias criadas para essa classe (Ex: Funcionario.pisoSalarial).
Agregação e Composição
Agregação é um tipo de associação que ocorre quando a parte pode existir sem o todo e o todo não pode existir sem a parte.
Composição é um tipo forte de agregação e ocorre quando a classe parte perde sua identidade caso não esteja associada com a classe todo. Portanto, se a classe todo for destruída, todas as classes parte também o serão. A classe todo tem total responsabilidade pela gestão de suas partes, principalmente criação e remoção.
PARTE II: Interfaces e Classes Abstratas
Interface é um conjunto de métodos com suas assinaturas e sem implementação. É uma estrutura usada para encapsular os métodos que define e pode servir também para centralizar métodos utilizados e implementados por mais de uma classe. Variáveis criadas em uma interface são implicitamente public static final (constantes).
Uma Classe Abstrata não pode gerar instâncias. Seu propósito é servir de superclasse para outras classes, organizando melhor uma hierarquia de herança, pois essa superclasse possuirá propriedades (atributos e métodos) comuns entre as subclasses.
Diferentemente da Interface, uma Classe Abstrata pode possuir métodos concretos (implementados). Esses métodos podem ser usados em sua forma original ou sobrescritos pelas subclasses concretas (Polimorfismo).
PARTE III: Tratamento de Exceções, Interface Gráfica (GUI) e Captura de Eventos
Tratamento de Exceções
O Tratamento de Exceções do Java é voltado para situações em que o método que detecta um erro é incapaz de lidar com ele. Esse método irá disparar uma exceção (throw new Exception()). Com isso, deve existir um tratador de exceção, que ao detectar a exceção disparada, deverá capturá-la e tratá-la. O bloco try{} conterá as instruções para executar um método que poderá disparar uma exceção, e o bloco catch{} conterá instruções para capturar e tratar uma exceção.
Elementos de Interface Gráfica (GUI)
Os elementos de modo gráfico do Java (Swing/AWT) precisam ser estendidos da classe JFrame. Todos os elementos gráficos precisam ser criados como atributos, instanciados e adicionados (comando add) ou setados (comando set) à interface gráfica.
JLabel- classe necessária para criar rótulos, usados para identificar campos ou botões encontrados na interface gráfica.FlowLayouteGridLayout- classes que definem layout para a interface gráfica.FlowLayouté um layout de fluxo, onde os elementos gráficos são distribuídos na interface de forma linear (horizontalmente).GridLayouté um layout em grade, onde a interface é dividida em quadros e os elementos gráficos são distribuídos quadro a quadro.Font- classe usada para trabalhar com as fontes de textos dos campos de texto provenientes da classeJTextField.JButton- classe necessária para criar botões na interface gráfica.JCheckBox- classe necessária para criar campos de checagem na interface gráfica.JOptionPane- classe necessária para gerar mensagens gráficas em janelas.
A instanciação de um formulário de interface gráfica é feita pelo comando super, pois o método construtor está dentro da classe JFrame.
Comandos Essenciais em um Formulário Gráfico
Abaixo seguem comandos necessários em um formulário de interface gráfica:
super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// Excluir os objetos quando se encerrar a execução do formuláriosetSize(300, 100);// Define o tamanho da janela do formuláriosetVisible(true);// Faz com que a janela seja visível
Captura de Eventos (Listeners)
A seguir, conceitos de Captura de Eventos:
Interface ActionListener
A interface ActionListener serve para capturar eventos associados a botões existentes no formulário. O comando usado para que um evento seja enviado a ela é o addActionListener(). O método usado para trabalhar com este evento é o actionPerformed(), que usa como parâmetro uma variável do tipo ActionEvent, que é a classe necessária para implementar o comportamento proveniente de um evento.
Interface ItemListener
A interface ItemListener serve para capturar eventos associados a caixas de checagem existentes no formulário. O comando usado para que um evento seja enviado a ela é o addItemListener(). O método usado para trabalhar com este evento é o itemStateChanged(), que usa como parâmetro uma variável do tipo ItemEvent, que é a classe necessária para implementar o comportamento proveniente de um evento.
Observação sobre Instanciação de Listeners
Caso haja certeza de que determinado evento ocorrerá apenas uma vez, pode-se passar diretamente a instância do objeto botão no parâmetro do método addActionListener(). Contudo, se houver a possibilidade de que o evento ocorra várias vezes, o correto é instanciar o objeto botão em uma variável e passá-la como parâmetro. Isso garante que apenas um espaço de memória seja alocado para o objeto listener, evitando alocações repetidas.
O comando getSource() serve para checar a fonte do evento, ou seja, qual elemento gráfico do formulário foi responsável por gerar aquele evento.