• Nenhum resultado encontrado

E.M DR. LEANDRO FRANCESCHINI COMPONENTE CURRICULAR: TÉCNICAS EM SISTEMAS E PROCESSAMENTO DE DADOS II. Sumaré S. P

N/A
N/A
Protected

Academic year: 2021

Share "E.M DR. LEANDRO FRANCESCHINI COMPONENTE CURRICULAR: TÉCNICAS EM SISTEMAS E PROCESSAMENTO DE DADOS II. Sumaré S. P"

Copied!
29
0
0

Texto

(1)

E.M

D

R

.

L

EANDRO

F

RANCESCHINI

C

URSO

:

E

NSINO

M

ÉDIO

I

NTEGRADO

T

ÉCNICO EM

I

NFORMÁTICA

C

OMPONENTE

C

URRICULAR

:

T

ÉCNICAS EM

S

ISTEMAS E

P

ROCESSAMENTO DE

D

ADOS

II

(2)

2

Conteúdo

Introdução à Orientação a Objetos ...3

Orientação a Objetos ...3

PHP Orientado a Objetos ...5

EXEMPLO OBJETO Explicação: ...5

EXEMPLO MÉTODOS ...5

Métodos construtores e destrutores ...9

UML ... 13

O que é? ... 23

Para que serve? ... 23

Quando usar? ... 23

Diagrama de Casos de Uso ... 24

(3)

3

Introdução à Orientação a Objetos

A programação procedural (feita por meio de procedures) foi utilizada em larga escala durante muito tempo, contudo essa tendência vem se alterando há algum tempo. Esse tipo de programação é feito por meio de funções que recebem parâmetros de entrada, realiza um determinado procedimento e devolve um resultado a quem chamou essa função.

Alguns problemas foram detectados na programação procedural:

• Um procedimento não retém estado – a função recebe os parâmetros de entrada, os processa e devolve uma resposta sem armazenar informações para futuro uso

• Não implica organização modular – não faz com que o programador agrupe funcionalidades em comum.

• Não leva a uma organização de nomes – o desenvolvedor que deve elaborar padrões de nomenclatura para funções.

• Não facilita o reuso – existe repetição de código por conta de não contar com uma organização modular.

• Mais suscetível a mudanças – quando for necessário fazer qualquer mudança, o programador terá dificuldade em encontrar as funções que deve alterar.

O PHP é uma linguagem multiparadigma, ou seja, suporta mais de um paradigma de programação. Em outras palavras, você pode utiliza-lo para programação procedural ou orientada a objetos.

Orientação a Objetos

A orientação a objetos é uma abordagem para concepção de sistemas, um paradigma de programação. Essa abordagem envolve desde a modelagem do sistema até sua programação por meio do uso de objetos e relacionamento entre esses objetos. Alguns aspectos da POO são:

• Permite representar de uma forma mais real o “mundo” a ser modelado; • Acoplamento entre dados e funcionalidade;

• Utiliza abstrações do mundo real chamadas de OBJETOS; • Reuso de componentes do programa;

(4)

4

OBJETO

Informalmente, um objeto representa uma entidade de natureza física (uma pessoa) ou conceitual (uma reserva).

É um conceito, abstração ou alguma coisa com limites bem definidos e significado bem conhecido dentro do escopo de uma aplicação. Ex: carro, computador, funcionário.

Possuem características ou propriedades: ATRIBUTOS.

ATRIBUTOS

Os atributos identificam o estado de um objeto.

Um atributo é uma abstração de uma característica ou um estado que os objetos da classe possuem.

Exemplo: carro (modelo, cor, marca, ano de fabricação, preço).

MÉTODO

Todo objeto possui ações(operações) que modificam seu estado. Essas ações são chamadas de métodos.

Exemplo: carro(acelerar, frear, dar ré).

CLASSE

A classe contém a especificação dos objetos (fôrma) com seus atributos e métodos, ou seja, é na classe que determinamos os atributos de um objeto e seus métodos.

Exercícios

1. Identifique métodos e atributos para as situações a seguir: a) Conta Corrente

b) Livro

c) Arquivo de computador d) Funcionário

e) Carro vendido em concessionária.

2. Identifique possíveis nomes de classes para os atributos abaixo:

a) Martelo, chave de fenda, alicate, furadeira.

b) Carro, caminhão, motocicleta.

c) Lava-louças, liquidificador, batedeira, fogão.

d) I-Phone, Smartphone, I-Pad.

3. Escolha três objetos do mundo real e faça sua modelagem em termos de orientação a objetos, descrevendo, pelo menos, três atributos e três métodos possíveis de cada um destes objetos, e defina o nome de uma classe para cada um.

(5)

5

PHP Orientado a Objetos

EXEMPLO OBJETO

Explicação:

No programa a seguir declaramos uma classe, que é a estrutura utilizada para criar objetos. A classe em questão chama-se Produto e terá atributos como $descricao, $estoque e $preco. Para criar objetos a partir de uma classe, utilizamos o operador new seguido do nome da classe que desejamos instanciar. O operador new permite criar um objeto de cada vez. Após criarmos cada objeto, como são públicos, eles podem ser atribuídos de maneira simples. O var_dump() para exibir a estrutura de um objeto em tela e verificar se ele transporta os atributos definidos.

Código

<?php

class Produto //declaração de classe {

public $descricao; //declaração de atributos public $estoque; //declaração de atributos public $preco; //declaração de atributos }

$p1 = new Produto; // operador “new” está instanciando um novo objeto $p1->descricao = 'Chocolate'; //atribuição simples de valor

$p1->estoque = 10; $p1->preco = 7; $p2 = new Produto; $p2->descricao = 'Café'; $p2->estoque = 20; $p2->preco = 4; // output objeto inteiro var_dump($p1);

var_dump($p2);

Exercícios

1. Utilizando a mesma classe produto do exemplo anterior, crie novos atributos para ele: código do produto, marca, cor da embalagem, prazo de validade.

2. Com esses novos atributos criados, você deve criar novos objetos com os seguintes dados: a. Descrição: Bisnaguinhas Estoque: 30 Preço: 4,50 Código: 001 Marca: Seven Boys Cor da

(6)

6

b. Descrição: Nutella Estoque: 45 Preço: 9,50 Código: 002 Marca: Nutella Cor da

embalagem: Marrom Prazo de Validade: 10/11/2018

c. Descrição: Estoque: 30 Preço: 4,50 Código: 001 Marca: Seven Boys Cor da embalagem: Azul Prazo de Validade: 10/10/2018

EXEMPLO MÉTODOS

No exemplo a seguir vamos criar cada um desses métodos. Para um método referenciar um atributo interno da classe, basta utilizarmos a variável $this, que por sua vez é uma variável que representa o objeto atual que está sendo manipulado. Vamos começar utilizando uma classe pública (public), que não protege seus dados

Código

<?php

class Produto //declaração de classe {

public $descricao; //declaração de atributos public $estoque;

public $preco;

public function aumentarEstoque( $unidades ) //declaração de métodos {

if (is_numeric($unidades) AND $unidades >= 0) { //verifica se o valor passado é numérico e se é maior ou igual a zero

$this->estoque += $unidades;//aumenta a quantidade de estoque usando o valor passado

} }

public function diminuirEstoque( $unidades ) {

if (is_numeric($unidades) AND $unidades >= 0) { //diminui a quantidade de estoque usando o valor passado

$this->estoque -= $unidades; }

}

public function reajustarPreco( $percentual ) {

if (is_numeric($percentual) AND $percentual >= 0) { $this->preco *= (1 + ($percentual/100));

} } }

(7)

7 $p1->descricao = 'Chocolate';

$p1->estoque = 10; $p1->preco = 8;

print "O estoque de {$p1->descricao} é {$p1->estoque} <br>\n"; print "O preço de {$p1->descricao} é {$p1->preco} <br>\n";

$p1->aumentarEstoque(10); //envia parâmetros para o método Estoque $p1->diminuirEstoque(5);

$p1->reajustarPreco(50);

print "O estoque de {$p1->descricao} é {$p1->estoque} <br>\n"; print "O preço de {$p1->descricao} é {$p1->preco} <br>\n";

Atividades Métodos

1. Utilizando a mesma classe produto do exemplo anterior e os produtos criados anteriormente, crie três objetos, utilizando os atributos a seguir:

a. Descrição b. Estoque c. Preço d. Código e. Marca f. Cor da embalagem g. Data de Fabricação h. Prazo de validade i. Peso da embalagem j. Peso do produto 2. Crie três métodos novos:

a. O primeiro deve calcular o número de dias em que o produto pode ser consumido b. O segundo deve alterar a descrição do produto

c. O terceiro deve calcular o peso total do produto mais a embalagem.

Objeto privado (private)

Nesse caso, a classe vai proteger seus atributos, tornando impossível definir valores arbitrários a eles.

Código

<?php

(8)

8 { private $descricao; private $estoque; private $preco; } $p1 = new Produto; $p1->descricao = 'Chocolate'; $p1->estoque = 10; $p1->preco = 8;

Como não é mais possível definir valores aleatórios aos atributos, é preciso de métodos de acesso que vão fazer isso por nós. São eles SETTERS e GETTERS, métodos que permitem a gravação e a leitura dos atributos utilizando alguma regra de validação. No próximo exemplo, serão criados dois métodos de verificação, setDescricao() e setEstoque(), o primeiro para verificar se o valor inserido é uma string e o segundo para verificar se o valor é numérico. Isso só acontece porque os métodos são “public”, ou seja, eles podem ser acessados fora de sua classe. Contudo, os atributos são “private” o que faz com que sejam acessados somente dentro da própria classe.

Código <?php class Produto { private $descricao; private $estoque; private $preco;

public function setDescricao($descricao) {

if (is_string($descricao)) {

$this->descricao = $descricao; }

(9)

9 }

public function getDescricao() {

return $this->descricao; }

public function setEstoque($estoque) {

if (is_numeric($estoque) AND $estoque > 0) { $this->estoque = $estoque;

} }

public function getEstoque() { return $this->estoque; } } $p1 = new Produto; $p1->setDescricao('Chocolate'); $p1->setEstoque(10);

print 'Descrição: '. $p1->getDescricao() . '<br>'.PHP_EOL; print 'Estoque: ' .$p1->getEstoque() . '<br>'.PHP_EOL;

Métodos construtores e destrutores

Construtor

(10)

10 Um método construtor é um método executado automaticamente no momento em que construímos um objeto por meio do operador new. NÃO SE DEVE RETORNAR VALORES ATRAVÉS DO MÉTODO CONSTRUTOR, POIS O MESMO JÁ RETORNA O PRÓPRIO OBJETO QUE ESTÁ SENDO INSTANCIADO.

SINTAXE: NOME_CONSTRUCT()

No exemplo a seguir, o método construtor recebe três parâmetros: $descricao, $estoque e $preco. Caso as variáveis passem nas validações, o objeto $this-> atribui os valores internamente. Os métodos getters obtêm os valores dos atributos.

Código <?php class Produto { private $descricao; private $estoque; private $preco;

public function __construct($descricao, $estoque, $preco) {

if (is_string($descricao)) {

$this->descricao = $descricao; }

if (is_numeric($estoque) AND $estoque > 0) { $this->estoque = $estoque;

}

if (is_numeric($preco) AND $preco > 0) { $this->preco = $preco;

} }

public function getDescricao() {

(11)

11 }

public function getEstoque() {

return $this->estoque; }

public function getPreco() {

return $this->preco; }

}

$p1 = new Produto('Chocolate', 10, 5);

print 'Descrição: '. $p1->getDescricao() . '<br>'.PHP_EOL; print 'Estoque: ' . $p1->getEstoque() . '<br>'.PHP_EOL; print 'Preço: ' . $p1->getPreco() . '<br>'.PHP_EOL;

Destrutores

Um destrutor é um método especial executado automaticamente quando o objeto é desalocado da memória. Isso ocorre quando:

1. Atribuímos o valor NULL ao objeto;

2. Quando utilizamos a função unset() sobre o objeto; 3. Quando o programa é encerrado.

No exemplo a seguir, o método destrutor também irá exibir uma mensagem de debug. Neste exemplo, ele será executado quando o método unset() for acionado.

Código <?php class Produto { private $descricao; private $estoque;

(12)

12 private $preco;

public function __construct($descricao, $estoque, $preco) {

$this->descricao = $descricao; $this->estoque = $estoque; $this->preco = $preco;

print "CONSTRUÍDO: Objeto {$descricao}, estoque {$estoque}, preco {$preco}<br>\n"; }

public function __destruct() {

print "DESTRUÍDO: Objeto >descricao}, estoque >estoque}, preco {$this->preco}<br>\n"; } } $p1 = new Produto('Chocolate', 10, 5); unset($p1); $p2 = new Produto('Café', 100, 7); unset($p2);

(13)

13

Conversões de Tipos

É possível criar objetos sem ter classes definidas, ou seja, utilizar uma classe genérica vazia. Nesses casos, deve-se utilizar a classe stdClass (Standard Class), que não possui métodos e nem mesmo atributos. Ela é muito utilizada para conversões de tipos, como de array para objeto. Nesse exemplo, será criado um objeto chamado $produto da classe stdClass e por fim será utilizado o comando print para exibir sua estrutura.

Código

<?php

$produto = new StdClass;

$produto->descricao = 'Chocolate Amargo'; $produto->estoque = 100;

$produto->preco = 7; print_r($produto);

Para realizar operações de conversão de tipo (casting), como criar um objeto a partir de um vetor e vice-versa, por meio de utilização de um operador que utiliza o tipo de destino entre parênteses. O objeto $produto será convertido em um array ($vetor1) por meio do casting. Logo após, será feito o processo inverso com o $vetor2, que é um vetor, em um objeto ($produto2)

Código

<?php

$produto = new StdClass;

$produto->descricao = 'Chocolate Amargo'; $produto->estoque = 100;

$produto->preco = 7; $vetor1 = (array) $produto;

print $vetor1['descricao'] . "<br>\n";

$vetor2 = [ 'descricao' => 'Café', 'estoque' => 100, 'preco' => 7 ]; $produto2 = (object) $vetor2;

print $produto2->descricao . "<br>\n";

Outra conversão possível é utilizar variáveis variantes para declarar propriedades de um objeto. Será criado um vetor simples com alguns inidices definidos como descrição, estoque e preco. Após isso, será

(14)

14

criado um objeto ($objeto) vazio (stdClass). Depois disso, será percorrido o vetor ($produto) acessando a chave e o valor de cada posição a cada iteração. No laço de repetição serão preenchidos os atributos do objeto com a sintaxe ($objeto->$chave). A variável $chave será traduzida pelo seu conteúdo (descrição, estoque, preco) a cada passada do loop. A única diferença para a atribuição normal é a presença do cifrão($) na frente da variável de propriedade.

Código

<?php

$produto = array();

$produto['descricao'] = 'Chocolate Amargo'; $produto['estoque'] = 100;

$produto['preco'] = 7; $objeto = new stdClass;

foreach ($produto as $chave => $valor) {

$objeto->$chave = $valor; }

print_r($objeto);

Observação: O foreach é um laço de repetição para iterações em arrays ou matrizes. É um for

simplificado que decompõe um vetor ou uma matriz em cada um de seus elementos por meio de sua cláusula AS.

Sintaxe:

foreach ($array as $valor) { Instruções

}

Exemplo:

<?php

$fruta= array(“maçã”, “laranja”, “pera”, “banana”); foreach ($fruta as $valor) {

(15)

15

}

No formato mais avançado, ao invés de obter apenas o valor, você pode configurar duas variáveis. A primeira será a chave do índice e a segunda o valor desse mesmo índice. A cada volta do laço, foreach pega um item do seu array na ordem em que ele estiver, começando pelo primeiro.

Sintaxe:

foreach ( $meu_array as $chave_do_indice => $valor_do_indice ) {

echo $chave_do_indice;

echo $valor_do_indice;

}

Relacionamento entre Objetos

Serão apresentados aqui os principais tipos de relacionamento entre objetos: associação, composição e agregação.

Associação

Associação é a relação mais comum entre objetos. Na associação um objeto contém uma referência a outro objeto. Essa referência funciona como um apontamento em que um objeto terá um atributo que apontará para a posição da memória onde o outro objeto se encontra, podendo executar seus métodos. A forma mais comum de implementar uma associação é ter um objeto como atributo de outro.

(16)

16 <?php class Fabricante { private $nome; private $endereco; private $documento;

public function __construct( $nome, $endereco, $documento ) { $this->nome = $nome; $this->endereco = $endereco; $this->documento = $documento; }

public function getNome() {

return $this->nome; }

}

A associação entre as classes Produto e Fabricante se estabelece a partir da classe Produto. A classe Produto terá como atributos: descrição, estoque, preco e fabricante. Os atributos descrição, estoque e preco são escalares, ou seja, são definidos pelo seu tipo enquanto o Fabricante é um objeto. Para estabelecer o vínculo entre eles, serão criados os métodos setFabricante () e getFabricante (), sendo o primeiro responsável por receber um objeto da classe fabricante e armazená-lo internamente na propriedade $this->fabricante e o segundo responsável por retornar essa propriedade.

Código <?php class Produto { private $descricao; private $estoque; private $preco; private $fabricante;

(17)

17 private $caracteristicas;

public function __construct($descricao, $estoque, $preco) { $this->descricao = $descricao; $this->estoque = $estoque; $this->preco = $preco; }

public function getDescricao() {

return $this->descricao; }

public function setFabricante( Fabricante $f ) {

$this->fabricante = $f; }

public function getFabricante() {

return $this->fabricante; }

}

Depois que as classes foram definidas, elas podem ser utilizadas. No próximo código serão importadas as classes (require_once) para em seguida criar um objeto de cada: Produto e Fabricante. A partir dos objetos $p1 e $f1 criados, a associação é estabelecida entre os dois objetos no momento da execução do método setFabricante(), que recebe a inastância $f1 e a armazena no atributo $this->fabricante do objeto Produto.

Código

<?php

require_once 'classes/Fabricante.php'; require_once 'classes/Produto.php';

(18)

18 // criação dos objetos

$p1 = new Produto('Chocolate', 10, 7);

$f1 = new Fabricante('Chocolate Factory', 'Willy Wonka Street', '1234985235'); // associação

$p1->setFabricante( $f1 );

print 'A descrição é ' . $p1->getDescricao() . "<br>\n";

print 'O fabricante é ' . $p1->getFabricante()->getNome() . "<br>\n";

Composição

Composição é uma relação de duas classes todo/parte. O relacionamento tem esse nome porque um objeto contém outros objetos. A composição permite combinar diferentes tipos de objeto em um objeto mais complexo. O objeto (todo) é responsável pela criação e destruição de suas partes, exatamente por terem sido criadas pelo objeto “todo”. Tomemos um produto como exemplo, ele é composto por suas características. Como uma televisão que apresenta várias características como cor, peso tamanho e potência.

Será criada a classe Caraterística que terá dois atributos: nome e valor. Como exemplos de nomes “cor”, “peso”, “tamanho” e “potência”. Exemplos de valores: “branco”, “20kg”, “200 watts” e assim por diante.

Código <?php class Caracteristica { private $nome; private $valor;

public function __construct( $nome, $valor ) {

$this->nome = $nome; $this->valor = $valor; }

(19)

19

public function getNome() {

return $this->nome; }

public function getValor() {

return $this->valor;

Após isso, é preciso alterar a classe Produto para que ela fique com os métodos para compor características. É preciso declarar um atributo $característica, que será um vetor interno que armazenará uma ou mais instâncias contendo objetos da classe Característica. O método addCaracteristica(), que vai receber os parâmetros $nome e $valor e vai criar um objeto da classe Caracteristica para armazenar os dois dados. O objeto criado será adicionado ao vetor ($this->características). O método getCaracteristicas() simplesmente retornará o vetor de características.

Código <?php class Produto { //.. private $caracteristicas;

public function addCaracteristica( $nome, $valor ) {

$this->caracteristicas[] = new Caracteristica($nome, $valor); }

public function getCaracteristicas() { return $this->caracteristicas; }

}

Finalmente vamos ver como funciona a composição. Vamos importar as classes necessárias (require_once) para o programa principal. Depois vamos criar o objeto $p1 da classe Produto com

(20)

20

alguns atributos iniciais. Cada vez que se inicia o método addCaracteristica() são passados o nome e o valor da característica, será criado internamente um objeto da classe Caracteristica, contendo o nome e o valor. Esses objetos criados não existem fora da classe Produto. Assim, se excluirmos o objeto $p1 (Produto) da memória com um comando unset(), os objetos da classe característica também serão excluídos já que só existem na classe. Esse é o conceito de composição, no qual um objeto (todo) contém uma ou mais instâncias de outro objeto (parte), sendo responsável pela sua criação e destruição.

Código

<?php

require_once 'classes/Produto.php'; require_once 'classes/Caracteristica.php'; // criação dos objetos

$p1 = new Produto('Chocolate', 10, 7); // composição

$p1->addCaracteristica( 'Cor', 'Branco' ); $p1->addCaracteristica( 'Peso', '2.6 Kg' );

$p1->addCaracteristica( 'Potência', '20 Watt RMS' ); print 'Produto: ' . $p1->getDescricao() . "<br>\n"; foreach ($p1->getCaracteristicas() as $c)

{

print ' Característica: ' . $c->getNome() . ' - ' . $c->getValor() . "<br>\n";

Composição

Agregação também é um tipo de relação entre objetos todo/parte. Na agregação um objeto agrega outro objeto, ou seja, torna um objeto externo parte de si mesmo pela utilização de um de seus métodos. Assim o objeto “todo” poderá utilizar funcionalidades do objeto agregado. Nessa relação um objeto poderá agregar uma ou mais instâncias de um outro objeto. Para agregar muitas instâncias, a forma mais simples é utilizar arrays. Criamos um array como atributo da classe , e o papel desse array é armazenar inúmeras instâncias de outro objeto.

(21)

21 Na agregação, diferentemente da composição, o objeto “todo” recebe as instâncias de objetos “parte” já prontas, ou seja, ele não é responsável por sua criação ou destruição. Assim as instâncias dos objetos “parte” são criadas fora da classe “todo” e agregadas (armazenadas internamente) por meio de um método de agregação. Quando o objeto “todo” for excluído da memória, as instâncias das “partes” não serão excluídas, visto que elas pertencem exclusivamente a um objeto “todos”.

O relacionamento entre uma cesta de compras e seus produtos pode ser visto como uma agregação. Esse relacionamento é todo/parte, pois enquanto a cesta é o “todo”, os produtos são suas “partes”. Mas diferentemente da composição as “partes” não são exclusivas do “todo”. Dessa forma um produto poderá fazer de diferentes cestas. Uma cesta pode ser formada por inúmeros produtos (instâncias da classe Produto).

A classe Cesta terá um método construtor utilizado para inicializar algumas variáveis como time (tempo de criação) e itens (vetor de produtos). Para agregar objetos do tipo Produto à Cesta, criaremos o método de agregação addItem() que receberá uma instância já existente de produto e irá agrega-la ao vetor ($this->itens) da classe cesta. Veja que o método addProduto() terá uma indução ao tipo Produto, ou seja, somente poderá receber objetos da classe Produto. A classe Cesta contará também com o método getItens(), que por sua vez retornará os itens da cesta.

Código <?php class Cesta { private $time; private $itens;

public function __construct( ) {

(22)

22 $this->time = date('Y-m-d H:i:s');

$this->itens = array(); }

public function addItem( Produto $p ) {

$this->itens[] = $p; }

public function getItens() {

return $this->itens; }

public function getTime() {

return $this->time; }

}

Agora iremos demonstrar o relacionamento de agregação na prática. Para tal, inicialmente vamos importar as classes necessárias (require_once). Em seguida instanciaremos um objeto da classe Cesta. Depois disso iremos agregar por três vezes os objetos da classe Produto dentro da classe Cesta ($c1) por meio do método addItem(). Veja que, diferentemente da composição, na agregação o método que cria “partes” já recebe as instâncias prontas, externas ao escopo da classe. Assim no escopo principal do programa temos quatro objetos em memória ($c1, $p1, $p2, $p3) e,ao excluirmos a cesta $c1, as demais instâncias de Produto continuarão existindo, podendo inclusive fazer parte de outras cestas de compras.

Código

<?php

require_once 'classes/Cesta.php'; require_once 'classes/Produto.php';

(23)

23 // criação da cesta

$c1 = new Cesta;

// agregação dos produtos

$c1->addItem( $p1 = new Produto('Chocolate', 10, 5) ); $c1->addItem( $p2 = new Produto('Café', 100, 7) ); $c1->addItem( $p3 = new Produto('Mostarda', 50, 3) ); foreach ($c1->getItens() as $item)

{

print 'Item: ' . $item->getDescricao() . "<br>\n"; }

Herança

UML

O que é?

A UML (Unified Modeling Language) é uma linguagem visual, onde diagramas representam o funcionamento (código e funcionalidade) de um sistema.

Para que serve?

Usada para literalmente “desenhar” como um sistema será implementado. A UML utiliza diagramas com figuras que representam funcionalidades de um sistema computacional. Contudo, ela também é utilizada para prever como será desenvolvido um ambiente computacional. Em outras palavras, utilizar os requisitos para criar um “esboço” detalhado do futuro sistema.

Quando usar?

Antes de codificar: projete como será o seu sistema antes de codificá-lo!

Durante a codificação: apresente suas ideias ao grupo de forma que todos possam interagir e

discutir um determinado ponto.

Depois da codificação: documente seu sistema na forma de diagramas para que novos

integrantes e novos colaboradores possam acelerar sua compreensão dos sistemas desenvolvidos pelo grupo.

(24)

24 • Diagrama de Casos de Uso

• Diagrama de Classes • Diagrama de Atividades • Diagrama de Objetos • Diagrama de Seqüência

Diagrama de Casos de Uso

Para que serve?

Representar o que cada tipo de usuário pode fazer no sistema.

Estrutura

Ator – representa os interventores no sistema, podendo ser usuários, sistemas ou

sub-sistemas;

Figura de palito Casos de uso – um conjunto ou sequência de ações;

Elipse

Assunto – um conjunto de casos de uso, pode ser o sistema em si;

Retângulo

Relacionamentos – representados pela linha, relacionam os casos de uso entre si ou ao

(25)

25

Linha tracejada (extend)

Exemplos

Atores: sistema de biblioteca (bibliotecária, usuário).

consultório médico (médico, atendente).

Casos de Uso: sistema de biblioteca (cadastrar leitor, inserir livro).

consultório médico (cadastrar paciente, diagnosticar).

Exemplo de Diagrama

Exercícios

(26)

26 a) Cliente realiza transferência de fundos em um caixa eletrônico.

b) Clientes compram livros na livraria.

c) É produzido um relatório de vendas para o gerente. d) Hóspede se registra em um hotel.

Resposta:

Caso de uso Ator

A . Transferir Fundos Cliente

B Comprar Livros Usuário

C Obter Relatório de

Vendas

Gerência

D Abrir Estadia Hóspede

2. Em uma empresa, vários projetos são realizados. Os cinquenta empregados da empresa trabalham em pelo menos um projeto. Há um sistema implantado na empresa que permite aos participantes de um determinado projeto marcarem suas horas de trabalho. Esse sistema também permite que o gerente, ao fim do mês, gere os relatórios com os totais de horas trabalhadas de cada participante. Para acessar o sistema é necessário que cada usuário realize o login no mesmo. Como ficaria o diagrama de casos de uso dessa situação?

Casos de Uso - Relacionamentos entre Casos de Uso

Extend e Include

Linha tracejada (extend)

Exercício

1. Imagine que você está fazendo um sistema de Editor de Texto. Nesse sistema o escritor

deve poder editar o documento podendo, ao editar, realizar algumas funções específicas como substituir texto, criar índice remissivo e corrigir ortografia. Elabore o diagrama de casos de uso para o sistema.

(27)

27

2. Em uma livraria, o sistema permite que o funcionário mantenha o cadastro de livros

através do cadastro, pesquisa, alteração e exclusão dos mesmos. Sempre que essas ações são executadas, o sistema deve registrá-la em um histórico. O cliente pode efetuar a compra do livro, sendo necessário emitir uma nota fiscal dessa compra. No momento da compra, o cliente pode optar por realizá-la à vista ou a prazo.

Diagrama de Classes

“Em programação, um diagrama de classes é uma representação da estrutura e relações das

classes que servem de modelo para objetos. Podemos afirmar de maneira mais simples que seria um conjunto de objetos com as mesmas características, assim saberemos identificar objetos e agrupá-los, de forma a encontrar suas respectivas classes. Na Unified Modeling

Language (UML) em diagrama de classe, uma classe é representada por um retângulo com três

divisões, são elas: O nome da classe, seus atributos e por fim os métodos.”

Extraído de: https://www.devmedia.com.br/orientacoes-basicas-na-elaboracao-de-um-diagrama-de-classes/37224

(28)

28

Atividade

1. Faça um diagrama de Classes para um sistema de compras, onde o cliente realizará a compra de produtos.

2. Desenvolva pelo menos 2 classes possíveis para os sistemas(as classes não precisam estar relacionadas entre si), sendo que cada classe deve ter no mínimo 4 atributos e 4 operações(métodos):

a) Sistema bancário

b) Sistema de uma clínica veterinária c) Sistema de uma locadora

d) Sistema de estoque de uma empresa e) Sistema de uma companhia aérea

3. Desenvolva o diagrama de classes para um sistema de uma escola conforme a descrição a seguir:

Os cursos podem ser cadastrados e excluídos do sistema, sendo que todos os cursos são registrados com um nome específico e uma determinada carga horária. As turmas de cada curso são formadas com data de início e data de término. Cada turma possui um período que variam entre manhã, tarde e noite, e podem estar na situação ativa ou cancelada. As turmas podem ser criadas ou excluídas. O sistema também oferece uma opção de pesquisa e alteração das turmas já cadastradas. Em cada turma, podemos ter várias matrículas de alunos, sendo que é necessário armazenar o número dessas matrículas. As matrículas podem ser geradas ou canceladas, em caso de desistência de algum aluno. Sobre os alunos o sistema armazena dados como RA, Nome, RG, Endereço e telefone. A secretaria da escola deve poder inserir, excluir, consultar e alterar os alunos da escola.

4. Imagine que você irá modelar um sistema para uma livraria digital. Faça o diagrama de classes para a livraria, levando em consideração que os dados a serem manipulados pelo

(29)

29 sistema serão: cliente, pedido, livro, autor, editora e carrinho de compra. Coloque o máximo de atributos e métodos que você achar pertinente para o sistema.

Diagrama de Classes: Generalização/Especialização

Atividade

Faça o Diagrama de Classes para um sistema Bancário:

Os clientes podem ser Pessoa Física ou Jurídica, sendo possível consultar seus respectivos CPFs ou CNPJs. Cada conta que é aberta possui um número, saldo, data de abertura, tipo, data de encerramento, situação (se está ativa ou inativa) e uma senha de acesso. As contas especiais possuem um limite e a conta poupança um rendimento. É possível abrir uma conta especial e consultar o Juros do Cheque especial. Todas as contas podem ser abertas, encerradas, consultadas e realizar depósito ou saque nas mesmas. Todos os clientes são cadastrados com nome, endereço, telefone e renda pessoal. Para todas as contas é mantido um histórico com todas as informações da conta e a data e horário. O histórico pode ser gravado e emitido um extrato.

Referências

Documentos relacionados

Methods: Retrospective case series evaluating patients undergoing rotator cuff repair, analyzed by the UCLA score (pre and 12-month postoperative) and Magnetic Resonance

Objective: To investigate the reliability of the 50-Foot Walk Test (50 FWT) and 30-second Chair Stand Test (30 CST) in patients who have undergone total knee arthroplasty

For minor hand surgery procedures such as trigger finger re- lease, De Quervain tenosynovitis operation topical and local anaesthesia seemed to be a viable solution, especially in the

#orastu tranje tokom vremena isporuke plus sigurnosne zalihe (koje obično podiu *1#) sada se dodaje očekivani manjak *1#, koji je prosečna vrednost verovatnog pada količine robe

Como fatores controláveis têm-se o equipamento de mistura (misturador de eixo vertical e betoneira de eixo inclinado) e a ordem de mistura dos materiais (tradicional e

Data limite para as Coordenações de Cursos Superiores encaminharem à CORAE os processos de Colação de Grau, Atas de Apresentação do TCC, Termo de Aprovação, convalidação de

O fato de que as coisas têm tamanhos, pesos, volumes, temperatura diferentes e que tais diferenças frequentemente são assinaladas pelos outros (está longe, está perto,

Por favor apresente a política global em matéria de acessibilidade praticada na sua cidade, referindo, por exemplo: inclusão da acessibilidade numa estratégia ou quadro de