Upload
doanhanh
View
247
Download
5
Embed Size (px)
Citation preview
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
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
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
� 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
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
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