Buscar

AULA 1

Prévia do material em texto

2019.2
PROGRAMAÇÃO II
CCT0695
Aula 2
PROFESSORES:	HENRIQUE TAVARES
			 EDIBERTO MARIANO
*
2019.2
MODELO
COMPORTAMENTAL
*
2019.2
*
Programação Procedural
 Programação procedural (ou programação procedimental) é às vezes utilizado como sinônimo de Programação imperativa (Paradigma de programação que especifica os passos que um programa deve seguir para alcançar um estado desejado), mas pode se referir (como neste artigo) a um paradigma de programação baseado no conceito de chamadas a procedimento (en: procedure call). Os Procedimentos, também conhecidos como rotinas, subrotinas, métodos, ou funções (que não devem ser confundidas com funções matemáticas, mas são similares àquelas usadas na programação funcional) simplesmente contêm um conjunto de passos computacionais a serem executados. Um dado procedimento pode ser chamado a qualquer hora durante a execução de um programa, inclusive por outros procedimentos ou por si mesmo.
2019.2
*
Programação OO
Informações organizadas em classes
São identificadas as entidades e seus relacionamentos para compor um sistema.
 
A computação flui por meio de um mar de mensagens trocadas entre os objetos.
2019.2
*
Anotações
 As anotações foram introduzidas no Java 5, e, desde então, a maioria do kits de ferramentas passou a usá-las intensamente. As anotações são decoradores aplicados no nível da classe e de variáveis, e definem os metadados relacionados à própria classe. O Hibernate adotou amplamente as anotações e as integrou à parte essencial do FRAMEWORK como se fossem cidadãos de primeira classe. Pelo fato de elas serem uma ferramenta necessária no desenvolvimento de mapeamento ORM sofisticados.
2019.2
*
Anotações
Classe persistente simples, Employee, definida sem anotações 
public class Employee {
	private int id = 0;
	private String nome = null;
	…
}
Classe persistente simples, Employee, definida com anotações 
@Entity
public class Employee {
	private int id = 0;
	private String nome = null;
	…
}
As anotações, por outro lado, são bem concisas e permitem verificações imediatas de tipo na compilação. Elas são decorações que representam metadados, aplicadas diretamente à classe, permitindo, desse modo, que as entidades sejam administradas de forma eficiente. 
2019.2
*
Identificador
@Entity
public class Employee {
	@Id
	private int id = 0;
	private String nome = null;
	//O Hibernate utiliza o método para acessar o campo.
	public int getId( ) {
		return id;
	}
	...
}
Todas as entidades persistentes devem ter seus identificadores definidos; do contrário, o Hibernate irá reclamar. Desse modo, usamos a anotação @Id para indicar o identificador do objeto ao framework. 
Em nossa classe Employee, a chave primária é declarada como uma variável id, portanto decoramos id com a anotação relevante: 
2019.2
*
Identificador ID
@Entity
public class Employee {
	@Id
	@Column(name=”EMPLOYEE_ID”)
	private int id = 0;
	private String nome = null;
	public int getId( ) {
		return id;
	}
	...
}
Quando usamos a anotação @Id na variável id, como no exemplo anterior, o Hibernate mapeia um campo chamado ID de nossa tabela Employee à variável id da classe Employee.
Outro aspecto a ser observado: A maioria dos bancos de dados não nos permitirá criar um campo chamado ID, pois ela é uma palavra-chave reservada. Em circunstâncias como essa, normalmente alteramos o nome do campo – por exemplo, EMPLOYEE_ID no caso da tabela Employee anterior. Como o campo do objeto e o nome da coluna não são iguais, devemos definir o nome da coluna explicitamente usando uma anotação @Column adicional.
2019.2
*
Reflexidade Computacional
Em ciência da computação, reflexão computacional (ou somente reflexão) é a capacidade de um programa observar ou até mesmo modificar sua estrutura ou comportamento. Tipicamente, o termo se refere à reflexão dinâmica (em tempo de execução), embora muitas linguagens suportem reflexão estática (em tempo de compilação).
A reflexão é comumente usada por programas que exigem a capacidade de examinar ou modificar em tempo de execução o comportamento de aplicativos em execução na máquina virtual Java.
O Reflection, em poucas palavras, serve para determinar métodos e atributos que serão utilizados de determinada classe (que você nem conhece) em tempo de execução. Há inúmeras utilidades para esse tipo de tarefa, podemos citar por exemplo a instalação de plugins adicionais ao nosso software desenvolvido. 
2019.2
*
Reflexidade Computacional
Class<ClassDesconhecida> classe = ClassDesconhecida.class;
for (Field atributo : classe.getDeclaredFields()) {
 System.out.println(atributo.getName()); 
}
Perceba no código acima que não sabemos quais os métodos e atributos da “ClassDesconhecida”, para isso vamos utilizar as ferramentas oferecidas pelo Reflection afim de descobrir essas informações em tempo de execução. Veja que com o método “DeclaredFields” conseguimos capturar todos os atributos da classe em questão, mesmo sem saber como ela foi construída.
2019.2
*
Reflexidade Computacional
Riscos do Java Reflection
Deve-se usar este recurso com muito cuidado, sempre atentando aos possíveis riscos que podem ser causados pelo uso indevido do mesmo:
 - Redução de Desempenho, pois se o código que esta sendo executado for requerido com muita frequência, consequentemente acarretará em uma redução de desempenho.
 - Problemas por restrição de segurança, especialmente se executado em um ambiente com regras específicas
 - Exposição de estrutura interna dos objetos, pois utilizando este recurso temos acesso a todos os métodos e atributos de determinado objeto, isso pode ser um problema em se tratando de segurança.
2019.2
*
Reflexidade Computacional
Benefícios do Java Reflection
Além dos riscos temos também os benefícios que podem ser aproveitados se usarmos o Java Reflection da forma correta e adequada.
 - Facilidade na manutenção
 - Minimização de Erros
 - Ganho de Produtividade
 - Padronização
 - Extensibilidade
2019.2
*
Reflexidade em java - exemplo
package model;
public class Cliente {
 private Integer matricula; private String nome;
 public Cliente(Integer matricula, String nome) {//MÉTODO CONSTRUTOR CHEIO ---- ALT + S - EM ECLIPSE
	 super(); this.matricula = matricula; this.nome = nome;
 }
 public Cliente() {//MÉTODO CONSTRUTOR VAZIO ---- ALT + S - EM ECLIPSE
		super();
 }
 public Integer getMatricula() { // MÉTODOS GETTERS e SETTERS ---- ALT + S - EM ECLIPSE
		return matricula;
 }
 public void setMatricula(Integer matricula) {
		this.matricula = matricula;
 }
 public String getNome() {
		return nome; }
 public void setNome(String nome) {
		this.nome = nome; }
}
2019.2
*
Reflexidade em java - exemplo
package model;
import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map;
public class RefleccaoMapCliente {
 public static Map<String, Object> getAttributesMap(Object obj) {	
		Map<String, Object> attributesMap = new HashMap<String, Object>();
		Class<?> objClass = obj.getClass(); Method[] methods = objClass.getMethods();
		for(Method method : methods) {
	 if(method.getName().startsWith("get") && method.getReturnType() != void.class) {
				 String attributeName = getAttributeName(method.getName());
	 			try {
					 Object value = method.invoke(obj); attributesMap.put(attributeName, value);
	 			} catch (Exception e) {
	 				e.printStackTrace(); }
	 		}
	 }
		 return attributesMap;
	}
	private static String getAttributeName(String name) {
		return name.substring(2);
 }
}
2019.2
*
Reflexidade em java - exemplo
package control;
import java.util.Map;
import model.Cliente;
import model.RefleccaoMap;
public class Principal {
 public static void main(String args[]){
 		Clientecli = new Cliente();
 		Class<Cliente> classe = Cliente.class; 
 // cli.setMatricula(1); //ATRIBUI VALOR PARA O ATRIBUTO MATRICULA
 // cli.setNome("Ediberto Mariano"); //ATRIBUI VALOR PARA O ATRIBUTO NOME
 		Map<String, Object> attributes = RefleccaoMap.getAttributesMap(cli);
 		System.out.println("REFLEXIDADE EM JAVA");
 		System.out.println("PROFESSOR: EDIBERTO MARIANO");
 		for(String key : attributes.keySet()) {
 	 		System.out.println(key + ": " + attributes.get(key));
 		}
 }
}
SAÍDA
2019.2
*
Exercícios
1 – Qual o conceito de anotações em uma classe java?
2 – O que as anotações definem em uma classe java?
3 – O as anotações representam em uma classe java?
4 – Defina em java a classe persistente simples Funcionario sem anotação, 
 composta com os atributos descritos abaixo.
 id: inteiro, nome: String, logradouro : String, bairro: String,
 cidade: String, uf: String, salario: Double.
5 – Defina em java a classe persistente simples Funcionario com
 anotação, composta com os atributos descritos abaixo.
 id: inteiro, nome: String, logradouro : String, bairro: String,
 cidade: String, uf: String, salario: Double.
6 – Para que serve o uso da anotação @Id em uma classe java?
7 – Defina em java a classe persistente simples Funcionario com
 anotação e um identificador, composta com os atributos
 descritos abaixo.
 id: inteiro, nome: String, logradouro : String, bairro: String,
 cidade: String, uf: String, salario: Double.
2019.2
*
Exercícios
8 – Em uma classe java para que serve a anotação @Column? 
9 – Para que serve o Reflection em uma classe java? 
10 – Quais os riscos do Java Reflection?
11 – Quais os benefícios do Java Reflection?
12 – Codifique um sistema que:
 a) realize o processo de reflexidade para a classe Cliente com os 
 seguintes atributos: Matricula, Nome, Bairro e Cidade;
 b) atribua via programa valores para os atributos da classe.
 c) exiba na tela o valor dos atributos com seus respectivos conteúdos.
13 – Codifique um sistema que:
 a) realize o processo de reflexidade para a classe Cliente com os 
 seguintes atributos: Matricula, Nome, Bairro e Cidade;
 b) atribua via teclado valores para os atributos da classe, com uso da classe
 Scanner.
 c) exiba na tela o valor dos atributos com seus respectivos conteúdos.
 
 
 
*
*
 
 
 
*
*
 
 
 
*
 
 
 
*
 
 
 
*
 
 
 
*
 
 
 
*
 
 
 
*
 
 
 
*
 
 
 
*
 
 
 
*
 
 
 
*
 
 
 
*
 
 
 
*
 
 
 
*
 
 
 
*
 
 
 
*

Continue navegando