2. ETE Santa Cruz (Pronatec)
Saulo Rodrigues
Profª Valdinéia, Modelagem de Sistemas (Entrega: 13/04/2015)
Sumário
Paradigma de Orientação a Objetos:
− Introdução;
− Orientação a objetos e Linguagem Estruturada;
− Conceitos Essenciais: Objeto, Mensagem, Método, Atributo, Classe, Encapsulamento,
Polimorfismo, Herança;
− Conclusão.
Persistência de Dados via JDBC:
− Introdução;
− Tipos de drivers;
− JDBC: Exemplo de utilização básica;
− Conclusão.
3. Paradigmas de Orientação a Objetos
INTRODUÇÃO
O paradgina de Orientação a Objetos (OO ou POO) possui o objetivo, em
conjunto com outras tecnologias, de atenuar o que se convencionou chamar
de "crise do software".
No início da era do computadores o hardware era tão caro que o custo do
software era muitas vezes desprezado nas organizações. As aplicações, por
sua vez, eram infinitamente mais simples, nem sempre justificando o
investimento.
Com o passar do tempo e a diminuição nos custos de hardware, observou-se
claramente um aumento vertiginoso no custo das aplicações, que se
tornaram muito mais caras que o próprio hardware.
O paradigma de Orientação a Objetos veio em maio a este cenário dar um
novo rumo no desenvolvimento de aplicações, tornando-as mais robustas e
ao mesmo tempo mais fáceis de serem produzidas. Levando o uso de
softwares a diversas novas áreas e tornando-o muito mais acessível.
4. Orientação a objetos e Linguagem Estruturada
Um sistema orientado a objetos é dividido em componentes e não mais em processos.
Imagine um sistema financeiro, onde faríamos toda a administração de uma
empresa. Teríamos as seguintes diferenças:
POO: Teríamos um objeto de fornecedores, por exemplo, onde todas as funções
estariam agrupadas no objeto e em nenhum outro lugar.
Estruturada: As rotinas e funções de fornecedores estaria espalhada em todo o
sistema, como em contas a pagar, contas a receber, cadastro, etc.
Imagine agora o cadastro de fornecedores, com todas as suas rotinas e funções:
Estruturada: Se você futuramente precisar alterar algum dado, função ou propriedade,
o que em seu programa será afetado? O que terá que ser reestruturado? Imagine a
você voltando a fase de testes e analisando todo o seu sistema até ter certeza que a
alteração que você fez não desencadeou um finita listas de alterações que você terá
que fazer em todo o sistema...
5. Orientação a objetos e Linguagem Estruturada
POO: as propriedades, funções e rotinas do objeto fornecedores estão todas em um
único objeto, encapsulados, facilitando essa necessidade futura de alterações e
atualizações.
Reutilização de código:
Estruturada: É possivel a reutilização de código na programação estruturada porém,
em muitos casos você será obrigado a utilizar o famoso "copiar e colar".
POO: Com a POO você é capaz de elaborar um relacionamento entre diversos
componentes, estabelecendo comunicação entre eles e facilitando assim, e muito a
reutilização de código, além da facilidade de se poder herdar atributos e
comportamentos de outros objetos.
7. Conceitos Essenciais
Objeto / instância de uma classe. Um objeto é capaz de armazenar estados através
de seus atributos e reagir a mensagens enviadas a ele, assim como se relacionar e
enviar mensagens a outros objetos. Exemplo de objetos da classe Humanos: João,
José, Maria;
Mensagem é uma chamada a um objeto para invocar um de seus métodos, ativando
um comportamento descrito por sua classe. Também pode ser direcionada
diretamente a uma classe (através de uma invocação a um método estático);
Método definem as habilidades dos objetos. Bidu é uma instância da classe
Cachorro, portanto tem habilidade para latir, implementada através do método de um
latido. Um método em uma classe é apenas uma definição. A ação só ocorre quando
o método é invocado através do objeto, no caso Bidu. Dentro do programa, a
utilização de um método deve afetar apenas um objeto em particular; Todos os
cachorros podem latir, mas você quer que apenas Bidu dê o latido. Normalmente,
uma classe possui diversos métodos, que no caso da classe Cachorro poderiam ser
sente, coma e morda
8. Conceitos Essenciais
Atributos são características de um objeto. Basicamente a estrutura de dados que
vai representar a classe. Exemplos: Funcionário: nome, endereço, telefone, CPF,...;
Carro: nome, marca, ano, cor, …; Livro: autor, editora, ano. Por sua vez, os atributos
possuem valores. Por exemplo, o atributo cor pode conter o valor azul. O conjunto de
valores dos atributos de um determinado objeto é chamado de estado;
Classe representa um conjunto de objetos com características afins. Uma classe
define o comportamento dos objetos através de seus métodos, e quais estados ele é
capaz de manter através de seus atributos. Exemplo de classe: Os humanos;
Encapsulamento consiste na separação de aspectos internos e externos de um
objeto. Este mecanismo é utilizado amplamente para impedir o acesso direto ao
estado de um objeto (seus atributos), disponibilizando externamente os métodos que
acessam (getters) e alteram (setters) estes estados. Exemplo: você não precisa
conhecer os detalhes dos circuitos de um telefone para utilizá-lo. A carcaça do
telefone encapsula esses detalhes, provendo a você uma interface mais amigável
(os botões, o monofone e os sinais de tom);
9. Conceitos Essenciais
Polimorfismo consiste em quatro propriedades que a linguagem pode ter (atente para o fato de
que nem toda linguagem orientada a objeto tem implementado todos os tipos de polimorfismo):
− Universal:
Inclusão: um ponteiro para classe mãe pode apontar para uma instância de uma
classe filha (exemplo em Java: "List lista = new LinkedList();" (tipo de polimorfismo
mais básico que existe)
Paramétrico: se restringe ao uso de templates (C++, por exemplo) e generics
(Java/C )♯
− Ad-Hoc:
Sobrecarga: duas funções/métodos com o mesmo nome mas assinaturas diferentes
Coerção: a linguagem que faz as conversões implicitamente (como por exemplo
atribuir um int a um float em C++, isto é aceito mesmo sendo tipos diferentes pois a
conversão é feita implicitamente);
Herança (ou generalização) é o mecanismo pelo qual uma classe (subclasse) pode estender
outra classe (superclasse), aproveitando seus comportamentos (métodos) e variáveis possíveis
(atributos). Um exemplo de herança: Mamífero é superclasse de Humano. Ou seja, um
Humano é um mamífero. Há herança múltipla quando uma subclasse possui mais de uma
superclasse. Essa relação é normalmente chamada de relação "é um";
10. Conclusão
É inadequado afirmar que o Paradigma de Orientação a Objetos veio substituir
a programação estruturada. Este veio atender a uma nova necessidade no
desenvolvimento de aplicações, e é perfeitamente possível encontrar
vantagens e desvantagens nos dois modelos de programação. Por isso, o
programador deve optar de forma consciente pela tecnologia mais
conveniente, muitas vezes utilizando as duas em uma mesma aplicação.
Rio de Janeiro, 12/04/2015
11. Referências
Referências:
− Pilares da Programação orientada a objetos http://www.devmedia.com.br/os-4-pilares-da-
programacao-orientada-a-objetos/9264);
− Programação Orientada a Objetos VS. Programação Estruturada
http://www.devmedia.com.br/programacao-orientada-a-objetos-x-programacao-
estruturada/11747
− Orientação a Objetos
http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objetos
− O paradigma Orientado a Objetos
http://www.inf.ufes.br/~vitorsouza/wp-content/uploads/academia-br-paradigmaoo.pdf
12. Persistência de dados via JDBC
INTRODUÇÃO
Em ciência da computação, persistência se refere à característica de um estado que
sobrevive ao processo que o criou. Sem essa capacidade, o estado só existiria na
RAM, e seria perdido quando a RAM parasse (desligando-se o computador por
exemplo).
Isso é conseguido na prática armazenando o estado como dados em armazenamento
não volátil (como em um disco rígido ou memória flash), ou seja, via serialização dos
dados para um formato armazenável e depois os salvando em um arquivo.
Java Database Connectivity ou JDBC é um conjunto de classes e interfaces (API)
escritas em Java que fazem o envio de instruções SQL para qualquer banco de
dados relacional; Api de baixo nível e base para api’s de alto nível; Amplia o que
você pode fazer com Java; Possibilita o uso de bancos de dados já instalados; Para
cada banco de dados há um driver JDBC que pode cair em quatro categorias.
13. Tipos de Drivers
Tipos de Driver
Ponte JDBC-ODBC
É o tipo mais simples mas restrito à plataforma Windows. Utiliza ODBC para
conectar-se com o banco de dados, convertendo métodos JDBC em chamadas às
funções do ODBC. Esta ponte é normalmente usada quando não há um driver puro-
Java (tipo 4) para determinado banco de dados, pois seu uso é desencorajado
devido à dependência de plataforma;
Driver API-Nativo
O driver API-Nativo traduz as chamadas JDBC para as chamadas da API cliente do
banco de dados usado. Como a Ponte JDBC-ODBC, pode precisar de software extra
instalado na máquina cliente;
14. Tipos de Drivers
Driver de Protocolo de Rede
Traduz a chamada JDBC para um protocolo de rede independente do banco de dados
utilizado, que é traduzido para o protocolo do banco de dados por um servidor. Por
utilizar um protocolo independente, pode conectar as aplicações clientes Java a vários
bancos de dados diferentes. É o modelo mais flexível e pode ser visto como um driver
intermediário, pois também atua como Middleware. É mais utilizado para banco de dados
antigos como estatais de governos;
Driver Nativo
Converte as chamadas JDBC diretamente no protocolo do banco de dados utilizado.
Implementado em Java, normalmente é independente de plataforma e escrito pelos
próprios desenvolvedores. É o tipo mais recomendado para ser usado.
15. Exemplo de utilização do JDBC
O código a seguir, devidamente comentado, é um
exemplo de comunicação com o banco de dados
via JDBC:
import java.sql.*;
import java.util.ArrayList;
public class MySQLTutor {
private Connection c;
private ResultSet table;
public MySQLTutor(String driverName) throws
ClassNotFoundException {
// carrega driver
Class.forName(driverName);
}
public void connect(String user, String password)
throws SQLException {
// estabelece conexao com banco de dados
c =
DriverManager.getConnection("jdbc:mysql://localho
st/test?user="
+ user + "&password=" + password);
}
public void connect(String user) throws
SQLException {
connect(user, "");
}
public void connect() throws SQLException {
connect("anonymous", "");
}
16. Exemplo
public void query(String sql) throws SQLException {
// monta e executa consulta
Statement s = c.createStatement();
table = s.executeQuery(sql);
}
public String structure() throws SQLException {
// obtem e transforma em String a estrutura da tabela
StringBuffer str = new StringBuffer("[ ");
ResultSetMetaData m = table.getMetaData();
int colCount = m.getColumnCount();
for (int i=1; i<=colCount; ++i)
str.append(m.getColumnName(i) + " t");
return str.append(" ]").toString();
}
public void close() throws SQLException {
c.close();
}
public static void main(String[] args) {
String driverName="org.gjt.mm.mysql.Driver"; // MySQL
// String driverName="postgresql.Driver"; // PostgreSQL
try {
MySQLTutor db = new MySQLTutor(driverName);
if (args.length == 1)
db.connect(args[0]); // primeiro argumento: username
else if (args.length == 2)
db.connect(args[0],args[1]); // segundo argumento: password
else
db.connect( ); // acesso anonimo assumido
17. Exemplo
// neste exemplo, uma consulta fixa
db.query("Select * from pet");
System.out.println(db.structure());
System.out.println(db.showAll());
// fecha conexao com banco de dados
db.close();
}
catch (SQLException E) {
System.err.println("SQLException: " +
E.getMessage());
System.err.println("SQLState: " +
E.getSQLState());
System.err.println("VendorError: " +
E.getErrorCode());
}
catch (Exception e) {
e.printStackTrace();
}
}
}
18. Conclusão
Em Java temos um conjunto de predefinições e métodos coerentes para estabelecer
comunicação com o banco de dados além da estrutura JDBC. Temos ainda outras
tecnologias, como o Hibernate, que é um framework para o mapeamento objeto-
relacional escrito na linguagem Java, mas também é disponível em .Net como o nome
NHibernate. Este framework facilita o mapeamento dos atributos entre uma base
tradicional de dados relacionais e o modelo objeto de uma aplicação, mediante o uso
de arquivos (XML) ou anotações Java (veja Annotation (java)).
Hibernate é um software livre de código aberto distribuído com a licença LGPL.
Rio de Janeiro, 12/04/2015