Você está na página 1de 53

PROGRAMAÇÃO

ORIENTADA A OBJETOS
ESPECIALIZAÇÃO DE ENGENHARIA DE SOFTWARE
APRESENTAÇÃO
• Tenorio
• www.osfedera.com
• tenorio.petrolina@bol.com.br
APRESENTAÇÃO - EMENTA
• Apresentação: missão, objetivos, história da Orientação a
Objetos
• Aspectos de qualidade de software
• Objeto, classe, método e atributo, métodos e variáveis
estáticas, expressões e comandos;
• Criação e remoção de objetos, construtores, referências,
aliasing, mecanismos de passagem de parâmetros,
overloading, array;
• Encapsulamento,
APRESENTAÇÃO - EMENTA
• Ambientes de desenvolvimento para Java;
• Aspectos de análise e projeto orientados a objetos;
• Estruturas de dados em Java;
• Estruturação de sistemas em camadas;
• Pacotes; Herança, subtipos, e polimorfismo;
• Herança e Vinculação/Acoplamento Dinâmico;
• Classe abstrata e herança;
• Interface e subtipo;
• Mecanismo para tratamento de exceções;
• Applets, componentes gráficos básicos, o modelo de eventos de Java;
APRESENTAÇÃO -
REFERÊNCIAS
• DEITEL, H, DEITEL, P. J. Java: Como Programar.
6. ed. São Paulo: Pearson Brasil, 2005. 1152p.

• HORSTMANN, C.; CORNELL, G. Core Java 2,


Volume 1 - Fundamentals. 6th edition,
Prentice Hall, 2002

• HORSTMANN, C.; CORNELL, G. Core Java 2,


Volume 2 – Recursos Avançados. 6th edition,
Prentice Hall, 2002
APRESENTAÇÃO -
AVALIAÇÃO
• 1 PROVA ESCRITA

• 1 PROJETO DE DESENVOLVIMENTO
APRESENTAÇÃO - HORÁRIO
DIA HORÁRIO
18/03/2017 08 às 12h – 14h às 18h

19/03/2017 08 às 12h - 14:00 às 18:00

01/04/2017 08 às 12h – 14h às 18h

02/04/2017 08 às 12h - 14:00 às 18:00

21/04/2014 18:00-22:00h

22/04/2017 08 às 12h – 14h às 18h

23/04/2017 08 às 12h - 14:00 às 17:00

06/05/2017 08 às 12h – 14h às 18h

07/05/2017 08 às 12h - 14:00 às 17:00


APRESENTAÇÃO – DÚVIDAS?
PROGRAMAÇÃO
ORIENTADA A OBJETOS
Missão
• Motivar, apresentar, exercitar e consolidar o uso de
técnicas de programação orientada a objeto que
tenham um impacto considerável sobre qualidade de
software.
Objetivos
• Discutir aspectos de qualidade e modularidade de
software;
• Introduzir conceitos de POO e exemplos em Java;
• Indicar como programas em Java podem ser
adequadamente escritos e estruturados;
• Utilizar ambientes de programação em Java;
• Desenvolver uma aplicação;
Relevância e Motivação
• Como você realmente escreve um grande
software?
• Quanto tempo levará?
• Como o código será organizado?
• Dá para reaproveitar algum código?
• Como será testado?
• Será fácil depurar os bugs?
• Como se dividem as tarefas entre mais programadores?
• Como juntar todos os códigos ao final?
• Funciona?

12
Relevância e Motivação
• Técnicas a serem utilizadas na prática;
• Desenvolver software de qualidade;
• Java corresponde ao estado-da-arte;
• Impacto econômico e social;
Clareza versus Eficiência
• Pensamento a longo prazo e elegância, ao invés de
imediatismo e resultados de qualquer jeito.

• Software tem que ser adaptável, flexível, fácil de


mudar (custos baixos, mudanças rápidas)
Programação Orientada a Objetos
• Foco nos dados (objetos) do sistema, não nas funções

• Estruturação do programa é baseada nos dados, não


nas funções

• As funções mudam mais do que os dados


Objeto conta bancária
Estados do Objeto Conta
Bancária
O que é Java?
“Java é uma linguagem simples, orientada a objetos,
distribuída, interpretada, robusta, segura,
independente de arquitetura, portável, de alto
desempenho, concorrente e dinâmica”
Implementações em JAVA
• Interpretada
• Bytecodesda JVM
• Independente de plataforma

• Alto desempenho?
Alta Performance?
• Java oferece alternativas, compromissos
• Código do cliente pode ser interpretado
• compiladores JIT aumentam desempenho
• cliente universal
• código móvel, carregado pela rede, evitando instalações,
conflito entre versões, etc.
• Código do servidor pode ser compilado para código
de máquina
• Desempenho similar a C++
Java é Simples
• Sintaxe familiar a vários programadores (baseada em
C e C++)
• Elimina várias redundâncias de C++
• Simples para algumas aplicações, desde que se
conheça alguns pacotes
• Simples, dado tudo que a linguagem oferece
O Java eliminou...
• Ponteiros
• Goto, registros e union
• Número variável de argumentos
• Tipos fracos
• Criação e remoção de objetos
• alocar e liberar memória explicitamente
• Classes parametrizadas!
Java é Orientada a Objetos
• Objetos e Classes
• Encapsulamento de dados e operações
• Subtipos e Herança
• Polimorfismo
• Ligações dinâmicas (dynamic binding)
• Criação e remoção dinâmica de objetos
• alocação e liberação automática de memória
Java é Portável
• Em tese, redução de custos com migração, instalação,
treinamento, etc.

• Na prática, ainda é necessário depurar programas


antes de migrar para outra plataforma, mas toda a
arquitetura está pronta
Java é Distribuída
• Oferece suporte de alto nível para acesso a
Internet/WWW (pacote java.net)

• Objetos distribuídos com RMI e CORBA (Middlewares)

• Suporte para acesso a arquivos remotos, banco de


dados, etc.
Java é Robusta
• Ausência de ponteiros
• Fortemente tipada
• Coleta de lixo automática
• Exceções tipadas
• Acesso a arrays é verificado
• Variáveis são inicializadas automaticamente
• com exceção de variáveis locais de métodos que devem ser
inicializadas explicitamente
Java é Concorrente
• Essencial para implementar interfaces gráficas
decentemente

• Métodos sincronizados

• Monitores
Java: Linguagem e Ambiente
• Acesso a Internet e WWW (java.net)
• Applets (java.applet)
• Definição de interfaces gráficas (java.awt)
• Suporte a objetos distribuídos (java.rmi)
• Interface com Banco de Dados (java.sql)
• Básicos: threadse exceções (java.lang), arquivos
(java.io), utilitários de propósito geral (java.util)
História da POO
• O conceito de Orientação a Objetos data do final da
década de 60 e início da década de 70
• Simula 67 (60’s);
• Smalltalk (70’s);
• C++ (80’s).

• Surgiu da necessidade de modelar sistemas mais


complexos.
História da POO
• Como melhor modelar o mundo real utilizando um
conjunto de componentes de software?

• Considerando que nosso mundo é composto de


objetos, porquê não utilizá-los?

• A ideia é modelar utilizando objetos, determinando


como eles devem se comportar e como deve interagir
entre si.
História da POO
• Este paradigma de programação tenta ser o mais
óbvio, natural e exato possível;
• São conceitos essenciais:
• Classes e objetos;
• Atributos, Métodos e Mensagens;
• Herança e Associação;
• Encapsulamento;
• Polimorfismo;
• Interfaces.
Software de Qualidade
Impacto Econômico e Social
• Segurança de pessoas
• sistemas de controle de tráfego aéreo
• Disponibilidade de serviços essenciais
• home banking
• Telefonia
• Competitividade das empresas
• Melhores produtos a um menor custo
• Atração de novas empresas para a região
• investimentos na região
• arrecadação de impostos
Exemplos de
Falhas em sistemas
• Sistema de transporte de bagagens do aeroporto de
Denver
• 33 km de trilhos
• 4.000 carros teleguiados servindo 20 companhias aéreas
• 100 computadores em rede
Exemplos de
Falhas em sistemas
• 1991, pane no sistema telefônico da Califórnia e de
toda a costa
• modificação de apenas três das milhões de linhas de
código introduziu um bug
• 1986, Therac-25
• dois pacientes de câncer receberam doses fatais de
radioatividade
• o sistema da máquina tinha erros ocasionados por
execuções concorrentes de tarefas
Crise de Software
• 25% dos projetos são cancelados

• O tempo de desenvolvimento é bem maior do que o


estimado

• 75% dos sistemas não funcionam como planejado

• a manutenção e reutilização são difíceis e custosas


Cancelamentos
Atrasos
Causas da Crise de Software
• Essências (mais requisitos) e Acidentes (bugs)
• Má qualidade das linguagens, ferramentas e
metodologias
• Complexidade dos sistemas
• Dificuldade e custos de formalização
• uma linha de código do sistema de controle de lançamento
do ônibus espacial da NASA custa 1.000 dólares
Qualidade de Software

• Existem muitas definições de qualidade de software


propostas na literatura, sob diferentes pontos de vista

• Qualidade é um termo que pode ter diferentes


interpretações
Qualidade de Software

• Definição Peters (2002): “Qualidade de software é avaliada


em termos de atributos de alto nível chamados fatores, que
são medidos em relação a atributos de baixo nível chamados
de critérios”.

• Definição Sanders (1994): “Um produto de software


apresenta qualidade dependendo do grau de satisfação das
necessidades dos clientes sob todos os aspectos do produto”
Qualidade de Software

• Definição Pressman: “Qualidade de software é a


conformidade a requisitos funcionais e de
desempenho que foram explicitamente declarados, a
padrões de desenvolvimento claramente
documentados, e a características implícitas que são
esperadas de todo software desenvolvido por
profissionais”.
Qualidade de Software

• Definição ISO9126 (1994): “Qualidade é a totalidade


de características e critérios de um produto ou serviço
que exercem suas habilidades para satisfazer às
necessidades declaradas ou envolvidas”.
Fatores de Qualidade de Software
• Correção
• Robustez (adversidades)
• Extensibilidade
• Reusabilidade
• Compatibilidade
Fatores de Qualidade de Software
• Eficiência
• Portabilidade
• Testabilidade
• Integridade
• Facilidade de uso
Qualidade de Software
(para o Varejo)
• Correto
• A loja não pode deixar de cobrar por produtos
• Robusto e altamente disponível
• A loja não pode parar de vender
• Eficiente
• O consumidor não pode esperar
• A empresa quer investir pouco em recursos
computacionais (CPU, memória, rede)
Qualidade de Software
(para o Varejo)
• Altamente extensível e adaptável
• A empresa tem sempre novos requisitos (para ontem!)
• A empresa quer o software customizado do seu jeito
(interface, teclado, idioma, moeda, etc.)

• Reusável
• Várias empresas precisam usar partes de um mesmo
sistema
Qualidade de Software
(para o Varejo)
• Amigável e fácil de usar
• A empresa quer investir pouco em treinamento

• Aberto, compatível, de fácil integração com outros


sistemas
• Empresa já tem outros sistemas; controle de estoque,
fidelização, etc.
Qualidade de Software
(para o Varejo)
• Portável e independente de plataforma (hw e sw)
• Cada empresa opta por uma determinada plataforma

• Baixo custo de instalação e atualização


• A empresa tem um grande número de PDVs
Impacto de Qualidade em
Manutenção

• 70% do custo de software corresponde a manutenção

• Essência: modificação de requisitos


• Acidente: depuração
Manutenção
Produtividade
• Além de qualidade, é importante considerar a
produtividade

• Custo de desenvolvimento reduzido


• A empresa consumidora quer investir pouco em software
• A empresa produtora tem que oferecer “software barato”

• Tempo de desenvolvimento reduzido


• Suporte rápido às necessidades do mercado
“Software Barato”
• Nem tanto resultado de baixos custos de
desenvolvimento, mas principalmente da distribuição
dos custos entre vários clientes.

• Reuso, extensibilidade e adaptabilidade são essenciais


para viabilizar tal distribuição.
DÚVIDAS

Você também pode gostar