Prévia do material em texto
Programação Orientada a
Objetos (Mobile)
Leopoldo França
Introdução ao Coding
(Mobile)
Aumento da complexidade dos programas.
Programação estruturada - anos 60
Atualmente o tratamento estruturado não mais funciona.
Para resolver esse problema, a programação orientada a
objetos foi criada.
A Programação Orientada a Objetos utiliza os conceitos
que aprendemos no jardim de infância.
Introdução à orientação a objetos.
Desenvolvimento Orientado a Objetos
Visualiza e representa o mundo real como um conjunto
de objetos que interagem entre si para que
determinadas operações sejam realizadas.
Introdução à orientação a objetos.
Parar
Motorista Carro
4
Desenvolvimento Orientado a Objetos
Visão contemporânea adota perspectiva OO.
Forma de construir software que difere bastante dos
enfoques tradicionais.
Programação orientada a objetos é frequentemente
referenciada como um “novo” paradigma de
programação.
5
Desenvolvimento Orientado a Objetos
Programação implementada pelo envio de mensagens.
A solução de um problema consiste em identificar os
objetos, mensagens e sequências de mensagens para
efetuar a solução.
Cada objeto do mundo real transforma-se em um
“objeto” de software.
6
Desenvolvimento Orientado a Objetos
Viabiliza a montagem de sistemas a partir de
componentes.
Sensível redução no custo de manutenção do software;
Aumento na reutilização de código.
7
Linguagens típicas orientadas a objetos
A primeira linguagem: SIMULA (Noruega, 1966)
Smalltalk – pura (Xerox, década de 70)
C++, Objective-C, Object Pascal (Delphi),
JAVA e C#
Orientação Objeto depende mais da mentalidade do
programador do que da linguagem de programação.
8
Programação Orientada a Objeto em Java
JAVA – criada na Sun Microsystems em junho de 1991.
Estilo e sintaxe semelhantes as linguagens C / C ++.
Atualmente mantida pela Oracle.
Em nossa disciplina iremos utilizar a linguagem Java.
Os princípios da orientação a objetos são os mesmos,
podendo ser aplicados em várias linguagens.
Objetos
Classes
Atributos
Métodos
Construtores
Sobrecarga
Conceitos básicos de POO
Um objeto é qualquer coisa, real ou abstrata, sobre a qual
armazenamos dados e operações que manipulam tais
dados
Unidade básica de modularização do sistema na
abordagem OO
Um objeto é um ente independente, composto por:
atributos, isto é, características ou propriedades que definem o
objeto
comportamento, isto é, um conjunto de ações pré-definidas
(denominada métodos), através das quais o objeto responderá à
demanda de processamento por parte de outros objetos
Objetos
Classes
Uma classe é um gabarito para a definição de objetos
Classes: “fábricas” de objetos.
Exemplificando, temos que Pessoa é uma classe e João é
um objeto (instância) da classe Pessoa.
Um carro é uma classe; “meu carro” é um objeto.
Objetos similares são agrupados em classes
Diagrama de Classes (UML)
Nome da Classe
Atributos
Métodos
Nome
visibilidade nomeAtrib 1 : tipo1 = valor_default
visibilidade nomeAtrib 2 : tipo2 = valor_default
. . .
visibilidade nomeMetodo 1 ( lista args ) : tipo1
visibilidade nomeMetodo 2 ( lista args ) : tipo2
. . .
Classes e objetos em Java
[acesso] class NomeDaClasse
{
Atributos
Construtores
Métodos
}
Definição da
classe
O conteúdo da
classe
Estrutura de uma classe em Java
public class LivroNotas {
private String nomeCurso;
Construtor e métodos omitidos.
}
private String nomeCurso;
Modificador de
visibilidade Tipo
Nome da
variável
Atributos de uma classe em Java
Atributos
Atributos armazenam valores para um
objeto.
Eles também são conhecidos como
variáveis de instâncias.
Atributos definem o estado de um objeto.
Normalmente são definidos como privados
e vêm acompanhados de dois métodos:
•set<nomeAtributo>
•get<nomeAtributo>
Sobre os métodos Set e Get
• Métodos set:
• Também conhecidos como métodos modificadores.
• Atribuem valores a variáveis de instância.
• Devem validar novos valores para variáveis de instância.
• Podem retornar um valor para indicar dados inválidos.
• Métodos get:
• Também conhecidos como métodos de acesso ou métodos de consulta.
• Obtêm os valores das variáveis de instância.
• Podem controlar o formato dos dados que retornam.
Exemplo:
public class Produto {
private int codigo;
private String nome;
public String getNome() {
return nome;
}
public void setNome(String nome_produto) {
nome = nome_produto;
}
}
•Realizada com a palavra
reservada new.
•Processo conhecido como criação
de uma instância de uma classe.
•Tipo da variável pode diferir do
objeto realmente criado (desde que
estejam relacionados por herança).
Produto p = new Produto();
Declaração do
tipo da variável Variável
Objeto real
criado
Construção de objetos em Java
Construtores
Construtores
•Construtores inicializam um objeto.
•Eles têm o mesmo nome das suas classes.
•Eles armazenam valores iniciais nos atributos do objeto.
•Eles frequentemente recebem valores de parâmetros externos para definir
os atributos.
EX:
public Produto(int cod, String nome_prod)
{
codigo = cod;
nome = nome_prod;
}
Construtores
Pode existir mais de um construtor em uma classe;
Caso não seja definido nenhum construtor, o compilador cria o
construtor padrão, sem parâmetros;
O construtor padrão inicializa os atributos de classe para seus
valores padrões.
Caso seja definido qualquer construtor, o construtor padrão não será
adicionado pelo compilador;
Caso deseje-se que a classe ainda possua um construtor sem
parâmetros, é necessário declará-lo explicitamente.
Exemplo do uso de construtores em JAVA:
Exemplo do uso de construtores em JAVA:
Sobrecarga
• Chamamos de sobrecarga de métodos quando temos na mesma
classe métodos com o mesmo nome, contanto que tenham
diferentes conjuntos de parâmetros (assinatura diferente).
• Diferentes tipos, números e ordem dos parâmetros.
• Quando os métodos com sobrecarga são chamados o
compilador JAVA avalia seus parâmetros (ordem, quantidades,
tipos) para saber qual método correto deve executar.
INSTANCIAÇÃO E REFERÊNCIA DE OBJETOS
ENVIO DE MENSAGENS
•Objetos se comunicam através de trocas de
mensagens.
•As mensagens são compostas por um nome e por
parâmetros (opcional).
•Os objetos interagem entre si enviando mensagens
uns para os outros.
ENVIO DE MENSAGENS
CICLO DE VIDA DE UM OBJETO
• Temos então a seguinte sequência do ciclo de vida de um objeto:
1 – Criação: Envolve as etapas de declaração e construção do objeto.
2 – Utilização: Uso do objeto para sua função no programa.
3 – Destruição: Finalização do objeto, liberando a memória utilizada por esse objeto.
• Ciclo de vida (exemplo da classe Pessoa ):
1 – Criação: Pessoa p1 , p2 , p3 ;
p2 = new Pessoa ( ) ;
2 – Utilização: p2.setNome ( "Maria" ) ;
p2.setIdade ( 18 ) ;
3 – Destruição: p2 = null ;
• Java é uma das linguagens mais usadas para desenvolvimento Android.
• Originalmente desenvolvida pela SUN para ser utilizada em pequenos
dispositivos, está presente em diversas plataformas computacionais, desde
celulares e palmtops a computadores;
• Devido as suas vantagens, é hoje largamente adotada pela indústria no
desenvolvimento de software.
A tecnologia Java
Máquina Virtual Java (JVM)
• Executa bytecodes que são independentes da plataforma onde o programa
será executado;
• Pode ser implementada em software ou hardware.
• Provê definições para:
• Conjunto de instruções;• Conjunto de registradores;
• Pilha;
• Heap;
• Formato de arquivos .class.
Processo de produção de uma aplicação Android
• Classes Java são compiladas para bytecode.
• Um Android Application Package (APK) é produzido. O APK
inclui as classes java compiladas bem como qualquer
biblioteca ou recurso utilizado pela aplicação.
• Um APK é o equivalente do arquivo JAR do Java (um
arquivo zip com todo o conteúdo da aplicação).
Activity
• Classe Java que compõe uma aplicação Android;
• Atividades podem ser usadas para ajudar o usuário a fazer coisas como:
• Escrever um e-mail;
• Tirar uma foto;
• Encontrar um contato etc.
• São normalmente associadas com uma tela.
Activity
• Uma classe Java Activity decide qual layout será utilizado e
diz a aplicação como reagir as ações do usuário.
• Ex: Se o layout tiver um botão, a classe Activity terá o código
que será executado ao pressionar esse botão.
• Uma aplicação Android é composta por um conjunto de
telas, e cada tela está associada a um arquivo de layout e
uma Activity.
View
• Classe que dá suporte a criação de componentes de interface com o
usuário no Android.
• Ocupa uma área retangular na tela e é responsável por gerenciar
eventos e desenhar o visual do componente.
• Montamos o layout da interface com o usuário utilizando subclasses
da classe View.
• Algumas subclasses que iremos utilizar: Button, Textview, Imageview,
Spinner....
View
• A interface com o usuário pode ser
visualizada como um conjunto de
componentes, cada um deles com
um retângulo definindo sua área de
atuação.
XML
• (eXtensible Markup Language) pode ser pensado como um padrão
para gerar linguagens de marcação para necessidades especiais.
• Capaz de descrever diversos tipos de dados, facilita o
compartilhamento de informações por intermédio da internet.
• Entre as linguagens baseadas em XML temos: XHTML (formato para
páginas Web), RDF, SDMX, SMIL, MathML (formato para expressões
matemáticas), SVG (formato gráfico vetorial)…
• No Android utilizamos para definir o layout da interface gráfica.
Exemplo com interação com o usuário
• Podemos modificar a interface usando o Design Editor ou
editando diretamente o código XML.
• Ao adicionarmos componentes via Design Editor, o código
XML é alterado instantaneamente.
• Se adicionarmos um botão em nossa tela, teremos um
código semelhante ao visto a seguir.
Exemplo com interação com o usuário
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_below="@+id/textView"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="43dp" />
Activity
• Uma aplicação Android é formada por um conjunto de
activities.
• Uma Activity pode iniciar a execução de outra activity, o que
fará com que a primeira activity seja paralisada, mas seu
estado será preservado, sendo retomado quando ela voltar
ao foco.
• Para cada tela de nossa aplicação uma classe Activity.
A classe R.java
• Classe Java que é produzida / atualizada quando você cria ou compila
seu projeto.
• Reside na pasta app/build/generated/source/r/debug do seu projeto
em um pacote com o mesmo nome do pacote do seu projeto.
• É utlizada pelo Android para registrar os recursos utilizados pelo
software, e entre outras coisas, permite a obtenção de referências para
os componentes da interface de dentro do nosso código.
• Não precisamos alterar o código dessa classe.
Toast
• No Android, Toast é uma mensagem de notificação que
aparece, é exibida por um certo período de tempo e
desaparece.
• Este recurso não tem interação com o usuário, serve
somente para dar informações rápidas.
• Entre seus usos está o debug de aplicações.
Exemplo Toast
• // Exibe a mensagem por um período curto de tempo
• Toast.makeText(getApplicationContext(), "mensagem com exibição
curta", Toast.LENGTH_SHORT).show();
• // Exibe a mensagem por um período longo de tempo
• Toast.makeText(getApplicationContext(), "mensagem com exibição
longa", Toast.LENGTH_LONG).show();
Exemplo de uma activity com toast
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
public class Primeira_Activity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_primeira_);
Toast.makeText(Primeira_Activity.this, "Esta é a nossa Activity Principal",
Toast.LENGTH_LONG).show();
}
}
Exemplo
•Embora o método onCreate não tenha essa
finalidade, podemos usá-lo em conjunto com o
Toast para fazer testes rápidos com algoritmos.
•Vamos ver um exemplo disso.
Exemplo
public class Primeira_Activity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_primeira_);
int v[ ] = {1,2,3,4,5};
int soma = 0;
for(int i = 0; i < v.length; i++) {
soma = soma +v[i];
}
Toast.makeText(Primeira_Activity.this, "Soma: " +
soma, Toast.LENGTH_LONG).show();
}
}
soma = 1
Valor de i Soma:
soma = 3
soma = 6
soma = 10
soma = 15
i = 0
i = 1
i = 2
i = 3
i = 4
Exemplo – Jogo do Marciano
• O Jogo do Marciano consiste de uma brincadeira de adivinhação. O jogador
deve descobrir em que árvore o marciano está escondido. Ele deve tentar
acertar digitando o número da árvore onde o marciano estaria escondido.
Esse número varia de 1 a 100. A cada tentativa, o jogo informa se o marciano
está naquela árvore ou em uma árvore de número menor ou maior. Cada
tentativa é computada para que no final seja exibido o número total de
tentativas até encontrar o marciano.
• Vamos ver esse exemplo usando uma interface gráfica (GUI) do Java e depois
a versão para Android.
Jogo do Marciano
GUI
Android
Jogo do Marciano - GUI
import java.util.Random;
import javax.swing.JOptionPane;
public class Jogo extends javax.swing.JFrame {
public static int arvore, cont=0;
public Jogo() {
initComponents();
initJogo();
}
private void initJogo(){
Random s = new Random();
arvore = s.nextInt(100) + 1;
mensagem.setText("");
tentativa.setText("Tentativa:");
entrada.setText("");
cont = 0;
}
Jogo do Marciano - GUI
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
titulo = new javax.swing.JLabel();
digite = new javax.swing.JLabel();
entrada = new javax.swing.JTextField();
entra = new javax.swing.JButton();
tentativa = new javax.swing.JLabel();
mensagem = new javax.swing.JLabel();
jLabel1 = new javax.swing.JLabel();
menuBar = new javax.swing.JMenuBar();
fileMenu = new javax.swing.JMenu();
inicioAsMenuItem = new javax.swing.JMenuItem();
exitMenuItem = new javax.swing.JMenuItem();
helpMenu = new javax.swing.JMenu();
aboutMenuItem = new javax.swing.JMenuItem();
...
Jogo do Marciano – GUI
private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {System.exit(0);
}
private void aboutMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
JOptionPane.showMessageDialog(null,"Jogo do Marciano\n2017");
}
private void inicioAsMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
initJogo();
}
Jogo do Marciano – GUI
private void entraActionPerformed(java.awt.event.ActionEvent evt) {
String res="";
int n = Integer.parseInt( entrada.getText() );
cont++;
tentativa.setText("Tentativa: "+cont);
if (n > arvore)
res = "Está em uma árvore menor!";
else
if (n< arvore)
res = "Está em uma árvore maior!";
else{
res = "Parabéns! Acertou em "+cont+" tentativas!";
cont=0;
Random s = new Random();
arvore = s.nextInt(100) + 1;
}
mensagem.setText(res);
}
Jogo do Marciano – GUI
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Jogo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Jogo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Jogo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Jogo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable()
{
public void run() {
new Jogo().setVisible(true);
}
});
}
Jogo do Marciano – Android
Jogo do Marciano – Android - MainActivity.java
package com.example.leopoldo.jogomarciano;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.util.Random;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView tentativa, mensagem;
private EditText entrada;
public static int arvore, cont=0;
public void initJogo(View v){
Random s = new Random();
arvore = s.nextInt(100) + 1;
mensagem.setText("");
tentativa.setText("Tentativa:");
entrada.setText("");
cont = 0;
}
Jogo do Marciano – Android
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tentativa = (TextView) findViewById(R.id.tentativa);
mensagem = (TextView) findViewById(R.id.mensagem);
entrada = (EditText) findViewById(R.id.entrada);
Random s = new Random();
arvore = s.nextInt(100) + 1;
mensagem.setText("");
tentativa.setText("Tentativa:");
entrada.setText("");
cont = 0;
}
Jogo do Marciano – Android
public void entraActionPerformed(View v) {
String res="";
String e = String.valueOf(entrada.getText());
entrada.setText("");
int n = Integer.parseInt( e );
cont++;
tentativa.setText("Tentativa: "+cont);
if (n > arvore)
res = "Está em uma árvore menor!";
else
if (n< arvore)
res = "Está em uma árvore maior!";
else{
res = "Parabéns! Acertou em "+cont+" tentativas!";
cont=0;
Random s = new Random();
arvore = s.nextInt(100) + 1;
}
mensagem.setText(res);
}
}
Jogo do Marciano – Android - activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tentativa"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tentativa:"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.165"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.073" />
<TextView
android:id="@+id/digite"
android:layout_width="162dp"
android:layout_height="41dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="272dp"
android:text="Digite sua tentativa:"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.038"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/entrada"
android:layout_width="155dp"
android:layout_height="41dp"
android:layout_marginBottom="208dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:ems="10"
android:hint="número de 1 a 100"
android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.962"
app:layout_constraintStart_toStartOf="parent" />
Jogo do Marciano – Android
<TextView
android:id="@+id/mensagem"
android:layout_width="335dp"
android:layout_height="83dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="100dp"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/b_entra"
android:layout_width="wrap_content"
android:layout_height="wrap_content"android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="28dp"
android:onClick="entraActionPerformed"
android:text="ENTRA"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.939"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/entrada" />
<Button
android:id="@+id/b_reset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:onClick="initJogo"
android:text="reset"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</android.support.constraint.ConstraintLayout>
Jogo do Marciano – Android - string.xml
<resources>
<string name="app_name">Jogo Marciano</string>
</resources>
DÚVIDAS ?