desenvolvimento de software
DESCRIPTION
Slides usados na disciplina do curso de Especialização em Projeto e Desenvolvimento de Sistemas, da Universidade Presbiteriana Mackenzie.TRANSCRIPT
![Page 1: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/1.jpg)
1
Desenvolvimentode Software (2011)
Especialização em Projeto e Desenvolvimento de Sistemas
PhD Vagner Figueredo de Santana
![Page 2: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/2.jpg)
2
Objetivo da disciplina
Desenvolver software básico (em Java) Utilizando boas práticas de programação
![Page 3: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/3.jpg)
3
Conteúdo programático
Implementação de conceitos de Orientação a Objetos (OO)
Desenvolvimento de soluções computacionais stand-alone (em Java)
![Page 4: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/4.jpg)
4
Avaliação
Um projeto Grupo de até 4 pessoas Conceitos possíveis: A, B, C e R Compõem o conceito
Apresentação Código
Enviar projeto por email até a data de apresentação
![Page 5: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/5.jpg)
5
Avaliação - Apresentação
Tempo (25 min. no máximo) Utilização dos termos de OO discutidos Clareza e didática da apresentação Legibilidade Carga de trabalho dos componentes do
grupo
![Page 6: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/6.jpg)
6
Avaliação - Código
Estrutura/modelagem/arquitetura do trabalho Clareza, legibilidade do código e
documentação Manipulação de exceções Interface de usuário Carga de trabalho dos componentes do grupo
![Page 7: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/7.jpg)
7
Introdução
A linguagem que utilizamos influencia a maneira como vemos o mundo
A linguagem de programação usada para resolver um problema vai influenciar na solução usada
![Page 8: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/8.jpg)
8
Introdução
Orientação a Objetos (OO) também é um paradigma de programação
... mas o que é paradigma?
![Page 9: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/9.jpg)
9
Paradigma de programação
Conceitualizar: ... o que significa computar ... construção e organização de tarefas ... como tarefas são executadas por um
computador
![Page 10: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/10.jpg)
10
Programação Orientada a Objetos
O que é uma linguagem de programação orientada a objetos?
![Page 11: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/11.jpg)
11
Programação Orientada a Objetos
É mais do que incluir coisas em uma linguagem de programação
POO é uma forma de pensar em como decompor problemas e resolvê-los computacionalmente
... mas POO é melhor que as outras?
![Page 12: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/12.jpg)
12
Um pouco de história
Conjectura/Hipótese de Alonzo Church, 1960s Qualquer função computável pode ser processada
por uma Máquina de Turing
Prova de Böhm, 1966 Uma Máquina de Turing pode ser emulada por
qualquer linguagem de programação que conte, no mínimo, com um condicional (e.g., if) e um laço (e.g., for)
![Page 13: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/13.jpg)
13
Por quê POO?
POO facilita a resolução de problemas e gerenciamento de grandes projetos de software
Escala bem Tem foco na reutilização de componentes É baseada em uma metáfora (Qual?) ... mas POO não é mágica
![Page 14: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/14.jpg)
14
Objeto
Conta com: Dados (i.e., attributos) Operações (i.e., métodos)
Tudo é objeto!
Atributos: “Memória” dos objetos e também são objetos
Métodos: Algoritmos ou conjunto de operações para uma dada requisição
![Page 15: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/15.jpg)
15
Classe
Categoria que representa um grupo de objetos similares
![Page 16: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/16.jpg)
16
Instância
Objeto que representa uma classe Um exemplar da classe
![Page 17: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/17.jpg)
17
Programas queseguem OO são: Organizados como objetos que interagem
entre si Cada um oferecendo um conjunto de
métodos para outros objetos Usando solicitações para que objetos
alterem seus próprios dados
![Page 18: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/18.jpg)
18
Tríade
Herança Organização em que atributos e métodos são
automaticamente disponibilizadas para qualquer descendente
Em outras palavras: agrupa invariantes Encapsulamento
Proteção dos atributos e métodos Polimorfismo
Existência de um nome (e.g., métodos, classes) e vários significados (i.e., funcionalidades)
![Page 19: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/19.jpg)
19
Em suma...
Não pergunte o que pode fazer com suas estruturas de dados
Pergunte o que suas estruturas de dados pode fazer para você
![Page 20: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/20.jpg)
20
Abstração em OO
Suprimir/esconder propositalmente detalhes de um processo para destacar outros detalhes.
... mas como encontrar o nível certo de abstração?
![Page 21: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/21.jpg)
21
Abstração em OO
Como gerar novos tipos? Composição:
Combinar tipos primitivo e/ou customizados para criar outros tipos de dados customizados
Tipos de dados abstratos
![Page 22: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/22.jpg)
22
Exemplos em código
![Page 23: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/23.jpg)
23
Java – Classe
class People{private String name;public People(String n){
setName(n);}public String getName(){
return name;}public void setName(String n){
name=n;}
![Page 24: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/24.jpg)
24
Java – Herança
class Employee extends People{private Double salary;...public Double getSalary(){
return salary;}public void setSalary(Double s){
salary=s;}
}
![Page 25: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/25.jpg)
25
Java – Polimorfismo
class FreeLancer extends Employee{private Double hoursPerMonth;private Double salaryPerHour;... // Setters & getterspublic void setSalary(Double h, Double s){
salary=h*s;}public void setSalary(String s){
try{String[] temp=s.split("/");salary=Double.parseDouble(temp[0])*Double.parseDouble(temp[1]);
}...
}
![Page 26: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/26.jpg)
26
Exercício pra entregar
Proposta de projeto Indicar
Classes Atributos Métodos
Herança Encapsulamento Polimorfismo
![Page 27: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/27.jpg)
27
Exemplo
Vamos trabalhar na modelagem de um jogo conhecido usando OO
Sugestões Banco Imobiliário Mario Kart Truco Bilhar ...
![Page 28: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/28.jpg)
28
Java – Visão geral da sintaxe
{ } delimitam grupos de comandos ; finaliza comando // comentário de linha /* */ comentário de bloco
![Page 29: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/29.jpg)
29
Java – Visão geral da sintaxe
Operadores ==, !=, <=, >=, <, > +, -,*, /, %
![Page 30: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/30.jpg)
30
Java – Tipos
Alguns tipos primitivos int long boolean double char
![Page 31: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/31.jpg)
31
Java – Tipos
Alguns objetos Integer Boolean Double String
![Page 32: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/32.jpg)
32
Java – Arrays
Sequência de valores de tamanho fixo Pode ser de tipos primitivos ou objetos
int[ ] values; String[ ] description;
Para criar arrays description = new String[10] ;
Operações description[0] == “Testing 1, 2, 3” ; // atribui System.out.println( description[0] ); // recupera
![Page 33: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/33.jpg)
33
Interface
Não pode ser instanciada Define os métodos que as subclasses
devem implementar Não contém implementação
![Page 34: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/34.jpg)
34
Classe Abstrata
Também não pode ser instanciada Mas pode conter implementação de
métodos Para serem instanciadas as subclasses
devem sobrescrever os métodos abstrados
![Page 35: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/35.jpg)
35
Herança múltipla
Em Java a herança múltipla pode ser implementada combinando interfaces
Herança de implementação apenas pode ocorrer de uma classe
![Page 36: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/36.jpg)
36
Java – Tipagem estática
Dinâmico Conhecido ou feito
enquanto o programa roda Estático
Conhecido ou feitoantes do programa rodar
Dar preferência ao estático ajuda a identificar bugs mais rapidamente
![Page 37: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/37.jpg)
37
PolimorfismoOverloading Sobrecarga Métodos sobrecarregados têm o mesmo
nome Mas diferentes argumentos Seja pelo tipo ou pelo número de
argumentos
![Page 38: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/38.jpg)
38
PolimorfismoOverloadingpublic void setSalary(Double s){
salary = s;
}
public void setSalary(Double h, Double s){
salary = h * s ;
}
public void setSalary(String s){
try{ salary = Double.parseDouble( s );} catch( NumberFormatException nfe ){...}
}
![Page 39: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/39.jpg)
39
PolimorfismoOverriding Sobrescrita Um novo corpo é dado para método
herdado Para chamar a implementação da
superclasse basta utiliza super.nomeDoMétodo( ... );
![Page 40: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/40.jpg)
40
PolimorfismoOverloading vs. Overriding Não confunda Overloading ...
Métodos na mesma classe com mesmo nome, mas com argumentos diferentes
... com Overriding Métodos implementados na superclasse e na
sua subclasse, com mesmos nome e argumentos
Uma forma de evitar overriding é usar final
![Page 41: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/41.jpg)
41
Campos e métodos estáticos
Ao declarar campos/métodos como estáticos eles são associados à classe e não ao objeto
Ele tem um valor apenas para todo o programa
Constantes normalmente usam static e final public static final PI = 3.14159;
![Page 42: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/42.jpg)
42
Criando pacotes
Basta utilizar a palavra package antes da definição da classe
// No arquivo Card.javapackage br.mackenzie.pds2011.monopoly.model;
abstract class Card{...
![Page 43: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/43.jpg)
43
Utilizando pacotes
Organizam classes java.net.URL
No código, basta inserir no início import java.net.URL;
No sistema de arquivos, os pacotes são diretórios Seguem estrutura inversa de domínio
br.com.[domínio].[aplicação].[componente].[Classe] br.com.exemplo.monopoly.model.Card
![Page 44: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/44.jpg)
44
Exceções
São condições anormais de retorno de um método
Exceções também são objetos
![Page 45: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/45.jpg)
45
Exceções
try – Conta com os comandos, então se há um problema, o fluxo vai para a sequência de catch
catch – “Pega” a exceção, então é possível fazer algo pra solucionar o problema
finally – Sempre é executado ao final do bloco; normalmente para liberação de recursos
![Page 46: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/46.jpg)
46
Exceções
Funcionamento básico try executa código que pode disparar um exceção Se uma exceção ocorre, então o fluxo do programa
é desviado e um tratador (catch) é procurado Note que tudo do bloco try expira O primeiro tratador (catch) adequado (em que o
parâmetro combinar com a exceção) é executado Então o fluxo de execução é desviado para o finally
![Page 47: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/47.jpg)
47
Exceções
...public String exemplo(){
...try{ ... }catch( [exceção mais específica] e1 ){ ... }catch( [exceção menos específica] e2 ){ ... }finally{ ... }
}...
![Page 48: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/48.jpg)
48
Disparando exceções
O comando throw dispara uma exceção Quando ocorre em um método, em vez de retornar
um valor, uma exceção é disparada Se uma exceção não é listada no comando throws, o
compilador indica que deve ser capturada com try/catch ou declarada (throws)
Se seu método chamar métodos que disparam (throws) exceções, elas devem ser capturadas ou disparadas no seu método Requisito catch-or-declare
![Page 49: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/49.jpg)
49
Disparando exceções
...public String exemplo2()
throws TipoDeExeção1, TipoDeExceção2{...// caso específicothrow new TipoDeExceção1();...// outro caso específico
throw new TipoDeExceção2();}...
![Page 50: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/50.jpg)
50
Type Casting
Muda o tipo do objeto declarado em tempo de execução, mas não afeta o tipo do objeto em si
É diferente de coerção de tipos primitivos Coerção produz um valor diferente em tempo
de execução (int)0.5 resulta no valor 0
![Page 51: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/51.jpg)
51
Generics
Em alguns casos, definir tipos de objetos no código pode reduzir as possibilidades de reuso
Generics possibilita parametrizar tipos Deixa o código mais estável Possibilita verificações de tipos em tempo de
compilação Muito usado em Collections como List e Map Note que não funciona com tipos primitivos
![Page 52: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/52.jpg)
52
Generics
public class Box {private Object object;public void add(Object object) {
this.object = object;}public Object get() {
return object;}
}
Fonte: Oracle – The Java Tutorials – Learning the Java Language
![Page 53: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/53.jpg)
53
Generics
public class BoxDemo1 {public static void main(String[] args) {
// ONLY place Integer objects//into this box!Box integerBox = new Box();
integerBox.add(new Integer(10));Integer someInteger =
(Integer)integerBox.get();System.out.println(someInteger);
}}
Fonte: Oracle – The Java Tutorials – Learning the Java Language
![Page 54: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/54.jpg)
54
Generics
public class BoxDemo1 {public static void main(String[] args) {
// ONLY place Integer objects//into this box!Box integerBox = new Box();
integerBox.add(“10”);Integer someInteger =
(Integer)integerBox.get();System.out.println(someInteger);
}}
Fonte: Oracle – The Java Tutorials – Learning the Java Language
![Page 55: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/55.jpg)
55
Generics
public class Box<T> {private T t; // T stands for "Type“public void add(T t) {
this.t = t;}public T get() {
return t;}
}
Fonte: Oracle – The Java Tutorials – Learning the Java Language
![Page 56: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/56.jpg)
56
Generics
public class BoxDemo3 {public static void main(String[] args) {
Box<Integer> integerBox = new Box<Integer>();
integerBox.add(new Integer(10));// no cast!Integer someInteger = integerBox.get(); System.out.println(someInteger);
}}
Fonte: Oracle – The Java Tutorials – Learning the Java Language
![Page 57: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/57.jpg)
57
Generics
Pode ter mais de um identificador, mas devem ser diferentes Exemplos:
List<T> Box<T> HashMap<K,V> List<Box<T>> List<Box<HashMap<K,V>>>
![Page 58: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/58.jpg)
58
Generics
Convenções de nomenclatura: E - Element (usado em Collections) K - Key N - Number T - Type V - Value
![Page 59: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/59.jpg)
59
Generics
Há casos em que desejamos restringir os tipos passados como parâmetro
Nesses casos podemos usar bounded type parameters Exemplo: Box<T extends Number>;
Note que extends aqui se refere tanto a classes quanto a interfaces
Para indicar a implementação de interfaces basta concatenar usando & Exemplo: Box<T extends Number & MyInterface>
![Page 60: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/60.jpg)
60
Generics
Relembrando o exemplo do Banco Imobiliário
![Page 61: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/61.jpg)
61
Generics
// Declaração sem GenericsPrivate HashMap cards;...// Caso 1 – Propenso a errosCard c = cards.get( “Copacabana” ) ;...// Caso 2 – Pouco eleganteCard c = (Card)cards.get( “Copacabana” ) ;...
![Page 62: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/62.jpg)
62
Generics
// Declaração com Generics!private HashMap <String,T extends Card> cards;
...
// Caso 3 – Elegante e evita errosCard c = cards.get( “Copacabana” ) ;...
![Page 63: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/63.jpg)
63
Concorrência
Onde encontramos tarefas concorrentes? Java foi projetado para suportar concorrência Em programação concorrente temos duas
unidades básicas de execução: Processos Threads
Note que concorrência é possível mesmo em sistemas com um processador
![Page 64: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/64.jpg)
64
Processos e threads
Processo Ambiente auto contido de execução Conta com seu espaço em memória
Thread Existe dentro do processo Compartilha recursos do processo Eficiente, mas comunicação é complexa Toda aplicação tem ao menos uma thread
![Page 65: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/65.jpg)
65
Threads
Uma das formas de criar uma aplicação concorrente é controlar Criação e gerenciamento de threads Instanciação de threads para tarefas
assíncronas A aplicação que cria uma thread precisa
fornecer o código que vai rodar na thread
![Page 66: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/66.jpg)
66
Threads
Duas formas de instanciar threads: Runnable object
A interface Runnable define o método que deve ter o código a ser executado na thread – run
O objeto Runnable é passado para o construtor da Thread
![Page 67: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/67.jpg)
67
Threads
public class HelloRunnable implements Runnable {
public void run() {
System.out.println("Hello from a thread!");
}
public static void main(String args[]) {
(new Thread(new HelloRunnable())).start();
}
}
![Page 68: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/68.jpg)
68
Threads
Duas formas de instanciar threads: Estender a classe Thread
Thread implementa Runnable Ao estender a classe Thread, basta fornecer a
implementação do método run()
![Page 69: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/69.jpg)
69
Threads
public class HelloThread extends Thread {
public void run() {
System.out.println("Hello from a thread!");
}
public static void main(String args[]) {
(new HelloThread()).start();
}
}
![Page 70: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/70.jpg)
70
Threads
Toda thread tem uma prioridade entre Thread.MIN_PRIORITY Thread.MAX_PRIORITY
Cada nova thread herda a prioridade do objeto que a criou
O rodízio de execução entre as threads pode ocorrer com ou sem fracionamento de tempo (i.e., que usam quantum)
![Page 71: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/71.jpg)
71
Escalonamento de threads
![Page 72: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/72.jpg)
72
Ciclo de vida da thread
![Page 73: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/73.jpg)
73
Como controlar concorrência em métodos? Métodos sincronizados
Threads chamando o mesmo método ficam bloqueadas até que a execução seja terminada
Para tornar um método sincronizado, basta adicionar sinchronized ...
public synchronized int getX(){ return x ;}...
![Page 74: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/74.jpg)
74
Exercício
Discutam em grupo como resolveriam o problema de concorrência ao usar o padrão GoF Singleton
Identifique no projeto locais em que threads poderiam ser utilizadaS
![Page 75: Desenvolvimento de Software](https://reader033.vdocuments.mx/reader033/viewer/2022061213/54967ab3b479596a4d8b4f6e/html5/thumbnails/75.jpg)
75
Referências Java: Como programar – Deitel e Deitel The Java Tutorials - Learning the Java Language
http://download.oracle.com/javase/tutorial/java/TOC.html
MIT Open Course – Elements of Software Construction http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-005-elements-of-software-construction-fall-2008/
Oracle Java Tutorials – Concurrencyhttp://docs.oracle.com/javase/tutorial/essential/concurrency/index.html