28
Linguagem de Programação I CARLOS EDUARDO BATISTA CENTRO DE INFORMÁTICA - UFPB [email protected]

Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Linguagem de Programação I

CARLOS EDUARDO BATISTA

CENTRO DE INFORMÁTICA - UFPB

[email protected]

Page 2: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Gerenciando a Complexidade: Sistemas de Software

u Complexidade dos sistemas de software

u Estrutura

u Decomposição

u Abstração

u Hierarquia

u Projeto de sistemas complexos

2

Page 3: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Software - Complexidade

u  Software Simples x Software Complexo u Simples: scripts de configuração, algumas aplicações móveis etc.

u Propósito limitado

u Ciclo de vida geralmente curto

u Criados por uma ou poucas pessoas

u Complexos: reserva de passagens aéreas, sistemas de venda online etc. u Escopo de funcionalidades grande

u Desenvolvimento envolve muitas pessoas

u Ciclo de vida longo

3

Page 4: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Software - Complexidade

u Sistemas de software complexos u Todas os detalhes de um projeto de software não são

dominados por uma só pessoa

u Complexidade pode ser gerenciada, não eliminada

u A complexidade de um sistema de software advém do domínio do problema a que este se destina

u Desenvolvedor interpreta requisitos e implementa – não entende do domínio u Captura de requisitos é uma atividade difícil

u Requisitos evoluem

4

Page 5: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Software – Complexidade Inerente

u Dificuldade de se gerenciar o desenvolvimento de sistemas de software

u Sistemas com milhares de linhas de código são comuns

u Um mesmo problema possui várias soluções – qual a melhor?

u Software - Ilusão da simplicidade

5

Page 6: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Software – Complexidade Inerente

u Sistemas de software podem entrar em colapso se não gerenciados

u Em diferentes momentos: durante o projeto, durante a utilização etc.

u Quanto mais complexo o sistema, maior a chance de um colapso

u Negociação de requisitos com usuários/clientes delimita o escopo de funcionalidades

6

Page 7: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Negociação de requisitos

u Nem sempre a solicitação por uma funcionalidade possui um embasamento ‘lógico’

u Nem sempre o usuário/cliente sabe exatamente o que quer

u Muitas vezes a construção de um sistema parte da formalização de processos

Page 8: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

8

Page 9: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

9

Page 10: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

10

Page 11: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

11

Page 12: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Gerenciando a Complexidade

u Projetos de Software, quando não gerenciados adequadamente... u Atrasam

u Estouram orçamento

u Não atendem os requisitos elencados em conjunto com os usuários/clientes

u Gerenciar a complexidade u Entender o necessário acerca do domínio do problema

u  Traduzir em informação útil para construção de um sistema de software

12

Page 13: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Hierarquia

u  Sistemas Complexos u Estrutura hierárquica

u Diferentes níveis de abstração

u Decomposição u Sistema de Banco de Dados

u Computador Pessoal (placa mãe -> processador -> registradores...)

u  Sistemas complexos: u Estrutura de seres vivos (plantas, animais...)

u Estrutura da matéria (ligas, moléculas...)

13

Page 14: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Estrutura de sistemas complexos u  Complexidade é gerenciada através da construção de uma

representação estrutural hierárquica u  Sistema complexo = conjunto de subsistemas inter-relacionados

u  Projeto definirá quais agrupamentos lógicos compõem o sistema e como estes se relacionam

u  Estrutura lógica hierárquica define como são os relacionamentos

u  Todo-parte

Motor

Carro

Sistema de pistões

14

Page 15: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

http://necsi.edu/projects/mclemens/

15

Page 16: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Estrutura de sistemas complexos

u Abstrações e mecanismos comuns facilitam

u Exemplos u Joystick de videogame controla diferentes jogos

u Controle de navegação de veículos como aviões e carros (oferecem o mesmo conjunto de controles em diferentes modelos)

u Hierarquia todo-parte - composição

u Hierarquia “tipo de” - herança

16

Page 17: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Decomposição orientada a objetos

u Sistema = conjunto de subsistemas inter-relacionados

u Sistema possui uma estrutura lógica hierarquizada

u Abstrações chave: classes e objetos u Cada objeto é uma entidade com um

comportamento bem definido

u Sistema = objetos que colaboram entre si

17

Page 18: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Decomposição orientada a objetos

u Vantagens: u Organizar a complexidade através de

abstrações e mecanismos comuns u Facilita a reutilização de mecanismos

comuns u Favorece o desenvolvimento incremental

do sistema (evolução)

18

Page 19: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Decomposição orientada a objetos

u Abstração u Modelo idealizado que ignora alguns detalhes não essenciais

u Retirar do domínio do problema os detalhes relevantes e representar na linguagem da solução

19

Page 20: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Projeto de sistemas complexos

u Especificação funcional (requisitos funcionais)

u Limitações (hardware e software) u Desempenho e utilização de recursos

(requisitos não funcionais) u Satisfazer orçamento e prazos u Disponibilidade de equipe e instrumental

20

Page 21: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Projeto de sistemas complexos

u Notação para descrição da solução proposta u Exemplo: UML (Unified Modeling Language)

u Processo de desenvolvimento u Exemplo: RUP

u  Ferramentas u Exemplo: IDE, Sistemas para Controle de versão, Bug tracking

etc.

u Manutenção de software é uma tarefa complexa e cara

u Quanto mais cedo se antecipa/corrige um erro, melhor

21

Page 22: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

22

Page 23: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Orientação a objetos

u Orientação a Objetos (OO) é uma abordagem de programação que procura explorar nosso lado intuitivo.

u Os objetos usados para construir softwares são análogos aos objetos existentes no mundo real.

u Objetos que compartilham uma mesma interface (respondem as mesmas mensagens) são agrupados em classes. u Objetos são entidades dinâmicas, com ciclo de vida

definido

Page 24: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Orientação a objetos

u No enfoque de OO, a entidade mínima do processo de computação - os objetos - trocam mensagens entre si. u Chamada por funções (métodos) oferecidos pelos

objetos

u Modificam o estado dos objetos (valor de seus atributos)

Page 25: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Linguagens orientadas a objeto

u OO surgiu no final da década de 60 (!), através da linguagem Simula u Em 1967 a linguagem Simula já incorporava classes e

o conceito de herança

u  O termo “orientação a objetos” é introduzido somente em 1983, através da linguagem SmallTalk u  Paradigma se estabeleceu durante a década de 80

u  Linguagens: Ada, Eiffel, Object Pascal (Delphi/Kylix), Common Lisp, C++

u  Mais tarde: Java, Python, Perl, Ruby

Page 26: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Linguagens orientadas a objeto

u  Linguagens puras, são aquelas onde tudo é tratado consistentemente como um objeto, desde as primitivas até caracteres e pontuação (Smalltalk, Eiffel, Ruby).

u Algumas linguagens são projetadas para OO, mas com alguns elementos procedimentais (Java, Python)

u  Linguagens originalmente procedurais que evoluíram, como C++, Fortran etc.

Page 27: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Referências

u  Notas de aula do Prof. Renato Maia (Unimontes)

u  Notas de aula do Prof. Renato Mesquita (UFMG)

u  Notas de aula da Profa. Elisa Yumi Nakagawa

27

Page 28: Linguagem de Programação Iwiki.cbatista.net/lib/exe/fetch.php/lpi-a2-complexidadesoftware.pdfda linguagem Simula ! Em 1967 a linguagem Simula já incorporava classes e o conceito

Próximas aulas

u  Projeto de Software

u  Gerência de Versão de software (git)

u  Revisão de C

u  Linguagem C++

u  Motivação para o uso de C++ para o aprendizado de POO

u  C++ versus C

u  Quando usar C e quando usar C++

u  C++ versus Java

u  Sintaxe básica de C++

28