linguagem de programação i -...

29
Linguagem de Programação I Carlos Eduardo Batista Centro de Informática - UFPB [email protected]

Upload: doanhanh

Post on 14-Nov-2018

246 views

Category:

Documents


5 download

TRANSCRIPT

Linguagem de Programação I

Carlos Eduardo Batista

Centro de Informática - UFPB [email protected]

Gerenciando a Complexidade: Sistemas de Software

� Complexidade dos sistemas de software �  Estrutura � Decomposição � Abstração � Hierarquia �  Projeto de sistemas complexos

2

Software - Complexidade

� Software Simples x Software Complexo ◦ Simples: scripts de configuração, algumas aplicações móveis etc. � Propósito limitado � Ciclo de vida geralmente curto � Criados por uma ou poucas pessoas ◦ Complexos: reserva de passagens aéreas, sistemas de venda online etc. � Escopo de funcionalidades grande � Desenvolvimento envolve muitas pessoas � Ciclo de vida longo

3

Software - Complexidade

� Sistemas de software complexos ◦ Todas os detalhes de um projeto de software não são dominados por uma só pessoa ◦ Complexidade pode ser gerenciada, não eliminada ◦ A complexidade de um sistema de software advém do domínio do problema a que este se destina ◦ Desenvolvedor interpreta requisitos e implementa – não entende do domínio � Captura de requisitos é uma atividade difícil � Requisitos evoluem

4

5

Software – Complexidade Inerente

� Dificuldade de se gerenciar o desenvolvimento de sistemas de software

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

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

� Software - Ilusão da simplicidade

6

Software – Complexidade Inerente

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

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

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

7

Software – Complexidade Inerente

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

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

8

9

10

11

12

Gerenciando a Complexidade

�  Projetos de Software, quando não gerenciados adequadamente... ◦ Atrasam ◦ Estouram orçamento ◦ Não atendem os requisitos elencados em conjunto com os usuários/clientes

� Gerenciar a complexidade ◦ Entender o necessário acerca do domínio do problema ◦  Traduzir em informação útil para construção de um sistema de software

13

Hierarquia 14

Hierarquia

� Sistemas Complexos ◦ Estrutura hierárquica ◦ Diferentes níveis de abstração

� Decomposição ◦ Sistema de Banco de Dados ◦ Computador Pessoal (placa mãe -> processador -> registradores...)

� Sistemas complexos: ◦ Estrutura de seres vivos (plantas, animais...) ◦ Estrutura da matéria (ligas, moléculas...)

15

Estrutura de sistemas complexos

�  Complexidade é gerenciada através da construção de uma representação estrutural hierárquica ◦  Sistema complexo = conjunto de subsistemas inter-

relacionados �  Projeto definirá quais agrupamentos lógicos

compõem o sistema e como estes se relacionam

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

�  Todo-parte Motor

Carro

Sistema de pistões

16

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

Estrutura de sistemas complexos

� Abstrações e mecanismos comuns facilitam

�  Exemplos ◦  Joystick de videogame controla diferentes jogos ◦ Controle de navegação de veículos como aviões e carros (oferecem o mesmo conjunto de controles em diferentes modelos)

� Hierarquia todo-parte - composição � Hierarquia “tipo de” - herança

18

Projeto de Software

Sistemas de Software

DECOMPOSIÇÃO ALGORÍTMICA

DECOMPOSIÇÃO ORIENTADA A OBJETOS

Programação Estruturada

19

Decomposição orientada a objetos

� Sistema = conjunto de subsistemas inter-relacionados

� Sistema possui uma estrutura lógica hierarquizada

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

comportamento bem definido � Sistema = objetos que colaboram entre si

20

Decomposição orientada a objetos

� Vantagens: ◦ Organizar a complexidade através de abstrações e mecanismos comuns ◦ Facilita a reutilização de mecanismos comuns ◦ Favorece o desenvolvimento incremental do sistema (evolução)

21

Decomposição orientada a objetos

� Abstração ◦ Modelo idealizado que ignora alguns detalhes não essenciais ◦ Retirar do domínio do problema os detalhes relevantes e representar na linguagem da solução

22

Projeto de sistemas complexos

�  Especificação funcional (requisitos funcionais)

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

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

23

Projeto de sistemas complexos

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

�  Processo de desenvolvimento ◦ Exemplo: RUP

�  Ferramentas ◦ Exemplo: IDE, Sistemas para Controle de versão, Bug tracking etc.

24

Projeto de sistemas complexos

�  Falhas de projeto geram problemas maiores do que os que deveriam originalmente ser tratados por um sistema

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

25

26

Referências

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

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

27

Próximas aulas

�  Linguagem C++ � Motivação para o uso de C++ para o

aprendizado de POO � C++ versus C � Quando usar C e quando usar C++ � C++ versus Java � Sintaxe básica de C++ � Ambientes de desenvolvimento C++

28

Linguagem de Programação I

Carlos Eduardo Batista

Centro de Informática - UFPB [email protected]