Natureza do Software e dos Sistemas



Documentos relacionados
MÓDULO 4 SWING Parte 3

Programação III. Interface Gráfica - Swing. Interface Gráfica Swing Jocélio Passos joceliodpassos@bol.com.br. Interface Gráfica - Swing

Especialização em Engenharia de Software - CEUT

O objetivo desta prática é ensinar como usar a máquina chamada computador visível ou vc0, um simulador de computador de von Neumann escrito em Java.

Arquitetura de Tratamento de Eventos em Programas com GUI - Graphical User Interface

Programação Orientada a Objetos

Exemplo 1. Um programa que cria uma instância de uma classe que herda da classe Frame

8. Interfaces Gráficas de Usuário

Programação Visual em Java

Aula 11: Interfaces gráficas (1/2): elementos de interface Swing

PROGRAMAÇÃO ORIENTADA A OBJETOS -INTERFACES GRÁFICAS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

Programação Orientada a Objetos em Java. GUI Graphical User Interface

JAVA. Marcio de Carvalho Victorino. Interface Gráfica em Java (GUI)

Interface com o Usuário (UI) UIs Desacopladas (2/3) BSI Bacharelado em Sistemas de Informação LOO Linguagens Orientadas a Objetos

MC-102 Aula 01. Instituto de Computação Unicamp

Curso de Aprendizado Industrial Desenvolvedor WEB

Introdução a Java. Hélder Nunes

1) De acordo com o trecho de código escrito na linguagem JAVA, responda a questão abaixo:

Java. Marcio de Carvalho Victorino

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Java 2 Standard Edition Como criar classes e objetos

Tratamento de Eventos

Aplicações Gráficas com AWT

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Um pouco do Java. Prof. Eduardo

Programação Gráfica em Java.

Java Foundation Classes Coleção de pacotes para criação de aplicações completas Desktop Interfaces gráficas (GUIs- Graphical User Interface)

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

Programação Orientada a Objetos II

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

CURSO DE PROGRAMAÇÃO EM JAVA

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Analisar os sistemas operacionais apresentados na figura e responder as questões abaixo: Identificar

Módulo 7. Interface Gráfica com o Usuário GUI - Introdução. Programação Orientada a Objetos I Java (Rone Ilídio)

Qualidade de Software

Desenvolvimento de Aplicações Desktop

Prototype, um Design Patterns de Criação

Programação Orientada a Objetos (DPADF 0063)

CARTÃO RESPOSTA QUESTÃO RESPOSTA QUESTÃO RESPOSTA A F B G C H D I E J

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

JAVA APLICAÇÕES GRÁFICAS Propriedade Utilizada: FontSizeAnimation

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Escola Superior de Gestão e Tecnologia. Tratamento de Exceções

O programa abaixo exemplifica o uso da classe Image para carregar e mostrar uma imagem localizada em um arquivo.

Interface Gráfica. LPG II Java Interface Gráfica AWT. Introdução. AWT - Abstract Window Toolkit

Orientação a Objetos

Introdução à Engenharia de Software

Módulo 02 Programação Orientada a Objetos. Última atualização: 07/06/2010

JAVA APLICAÇÕES GRÁFICAS Propriedades Utilizadas: imagecomposite FACULDADE DE TECNOLOGIA SENAC PELOTAS

Objectivos:. Construir programas com interfaces gráficas Graphical User Interface (GUI) application programs

Invocação de Métodos Remotos

Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread.

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

FundamentosemInformática

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Tutorial RMI (Remote Method Invocation) por Alabê Duarte

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Interface Gráfica com o Usuário (GUI) Profa. Isabel Harb Manssour (Material adaptado das aulas da Profa. Luciana Nedel e do Prof.

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes

Entender princípios de projeto. Capacitação para construir GUIs. Entender os pacotes que contém componentes de GUI, e as classes e interfaces de

Introdução Geral à Plataforma Java ou Desenvolvimento Java de Sistemas na Web, em Celulares e na TV Digital Interativa

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Java Linguagem de programação

Tópicos em Engenharia de Software (Optativa III) AULA 2. Prof. Andrêza Leite (81 )

Desenvolvendo aplicações

Sistemas Distribuídos

INTERFACE COM O USUÁRIO (em Java) Programação Orientada a Objetos

Persistência de Classes em Tabelas de Banco de Dados

Programação online em Java

Gerenciadores de Layouts

Computação II - Java Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Programando GUIs

Java : Comunicação Cliente-Servidor.

Engenharia de Software

Sistemas Paralelos e Distribuídos /2004 Curso: Matemática /Informática Sistemas Distribuídos /2004 Curso: Ensino da Informática

Interface Gráfica. Prof. Marcelo Cohen

Jogo Da Velha. - Parte 1 - Fazendo a parte gráfica do jogo da Velha

Interface Gráficas Parte I. Bruno Crestani Calegaro

Guião de Introdução ao Eclipse IDE Índice

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

Num sistema de objectos distribuídos, dois conceitos são fundamentais.

Utilização do Appia. Tolerância a Faltas Distribuída 2003/04. Nuno Carvalho nunomrc@di.fc.ul.pt

Aula 2. Objetivos Conceitos; Instalação do Text Pad; Entendendo o código java do AloMundo1 Codificação do AloMundo2,AloMundo3 e AloMundo4.

Curso Java Starter. 1

Eclipse IDE Dá-se importância aos antepassados quando já não temos nenhum. Francois Chateaubriand

Programação. 3 Período

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Acesso a Banco. Conexão em Java. Conexão em Java. Programação Orientada a Objetos Profa. Cristiane e Prof. Daniel

Java - Swing. Raphaela Galhardo raphaela@j2eebrasil.com.br

3.1 Definições Uma classe é a descrição de um tipo de objeto.

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Transcrição:

Natureza do Software e dos Sistemas Jorge H C Fernandes

Diferença Fundamental entre Engenharia de Software e outras Engenharias! Os materiais são diferentes As teorias fundamentais são diferentes

Dificuldades de engenharia de Software Porque é dificil entenderem o que fazemos quando desenvolvendo software? Não há entendimento da diferença entre software e sistema! Porque é difícil separarmos o software do sistema? Porque o software afeta (profundamente) e depende do sistema no qual é utilizado

public class Calc { import java.awt.*; private int estadointeracao; import java.awt.event.*; Software private int operacaoselecionada; public class CalcVisual extends Frame { private long acumulador0; // Cria os painéis private long acumulador1; Panel panelteclas = new Panel(); private static final int NENHUMA Panel panelteclastopo = 0; = new Panel(); private static final int SOMA Panel = 1; panelteclasnumericas = new Panel(); private static final int SUBTRACAO = 2; private static final int ACUMULANDO_0 // cria os gerenciadores = 0; de layout dos painéis private static final int ACUMULANDO_1 BorderLayout BorderLayoutPrincipal = 1; = new BorderLayout(); public Calc() { BorderLayout BorderLayoutTodasAsTeclas = new BorderLayout(); long soma() { GridLayout gridlayoutclearcebackspace = new GridLayout(); operacaoselecionada = SOMA; GridLayout gridlayoutteclasnumericaseoperacoes = new GridLayout(); estadointeracao = ACUMULANDO_1; returnacumulador0; // cria a área de display da calculadora TextField textfielddisplay = new TextField(); long um() {return numerodigitado(1); long dois() {return numerodigitado(2); // cria os botões da calculadora long numerodigitado(int valor) Button { buttonbackspace = new Button(); if (estadointeracao == ACUMULANDO_0) Button buttonc = new { Button(); acumulador0 = acumulador0 Button * 10 buttonce + valor; = new Button(); estadointeracao = ACUMULANDO_0; Button button_0 = new Button(); returnacumulador0; Button button_1 = new Button(); else if (estadointeracao == Button ACUMULANDO_1) button_2 = new Button(); { acumulador1 = acumulador1 Button * 10 button_3 + valor; = new Button(); estadointeracao = ACUMULANDO_1; Button button_4 = new Button(); returnacumulador1; Button button_5 = new Button(); Button button_6 = new Button(); return0; Button button_7 = new Button(); Button button_8 = new Button(); long igual() { Button button_9 = new Button(); long resultado = 0; Button button_pontodecimal = new Button(); if (operacaoselecionada == Button SOMA) button_igual { = new Button(); resultado = acumulador0 Button + acumulador1; button_soma = new Button(); // cria o tratador de evento para o botão "2" button_2.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(actionevent button_2_actionperformed(e); button_9.setlabel("9"); button_soma.setlabel("+"); ); button_igual.setlabel("="); // cria o tratador de evento para o botão "+" button_soma.addactionlistener(new // adiciona alguns botões no painel de teclas superior java.awt.event.actionlistener() { gridlayoutclearcebackspace.setcolumns(3); public void actionperformed(actionevent panelteclastopo.setlayout(gridlayoutclearcebackspace); button_soma_actionperformed(e); panelteclastopo.add(buttonbackspace, null); panelteclastopo.add(buttonce, null); ); panelteclastopo.add(buttonc, null); // cria o tratador de evento para o botão "-" button_subtracao.addactionlistener(new // adiciona alguns botões java.awt.event.actionlistener() no painel de teclas inferior { gridlayoutteclasnumericaseoperacoes.setrows(4); public void actionperformed(actionevent gridlayoutteclasnumericaseoperacoes.setcolumns(5); button_subtracao_actionperformed(e); gridlayoutteclasnumericaseoperacoes.sethgap(4); gridlayoutteclasnumericaseoperacoes.setvgap(4); ); // cria o tratador de evento para o botão "*" panelteclasnumericas.setlayout(gridlayoutteclasnumericaseope button_mult.addactionlistener(new racoes); java.awt.event.actionlistener() { panelteclasnumericas.add(button_7, null); public void actionperformed(actionevent panelteclasnumericas.add(button_8, null); button_mult_actionperformed(e); Natureza do Software panelteclasnumericas.add(button_9, e dos Sistemas, por Jorge H C Fernandes null); panelteclasnumericas.add(button_divisao, null);

Software Conjunto organizado de instruções e descrições de dados Escrito em uma (ou mais) linguagens compreensíveis por um sistema de computação

Sistema um conjunto de elementos inter-relacionados que interagem no desempenho de uma função Sistema econômico mantém os recursos da economia em circulação Sistema Computacional atende a uma determinada necessidade de processamento de informações de usuários Sistema Solar Manter os planetas girando em torno do sol Sistema de injeção eletrônica regular a mistura ótima de combustível e ar para o funcionamento do motor Sistema digestivo incorporar, ao corpo de um animal, a energia e matéria contidas em alimentos Biosfera manter a vida sobre a terra

Um Sistema De Computador é uma Máquina O Usuário Conversa com a Máquina Sistema de Computador (Estendido Pelo Software) Saída (output) Entrada (input) Usuário

Uma Máquina de Calcular

Uma Máquina para Analisar Programas Java

Um Sistema para Desenhar ou Máquina de Desenhar

Um Sistema ou Máquina para Tratar Imagens

Um Sistema ou Máquina, que Simula um Celular, que simula um jogo de damas

Várias Máquinas Coexistem em um Sistema de Computador em um Mesmo Instante de Tempo

Um Sistema de Computador Programável é uma Fábrica de Máquinas Extensível E cada software descreve como fábricar uma máquina E o programador constrói estas descrições de máquinas conforme especificações do que a máquina deve fazer quando em funcionamento

O uso da Máquina é feito por uma Conversa, que é Baseada uma Linguagem Linguagem A (Conversar com Celular) Linguagem B (Conversar com Paint) Linguagem C (Conversar com Calculadora)

A Linguagem da Máquina Paint

A Linguagem da Máquina Calculadora

Vamos conversar com Algumas Máquinas? Converse com o Paint Converse com o GIMP Converse com o Powerpoint! Converse com o sistema operacional

No que consiste o conversar? Num diálogo com a máquina Na locução de frases que são construídas numa linguagem com sintaxe e semântica próprias

Quando uma máquina faz sucesso? Quando a conversa entre usuário e máquina é produtiva Quando do diálogo são produzidos resultados que satisfazem as necessidades do usuário

Máquinas Complexas e Hierarquizadas

Usuário Uso Máquina n+1 Interpretação do Software Software Carga Máquina n

Um Sistema Computacional Usual Máquina n ( MCSW) Software em Execução Interpretação... Máquina 2 ( MCSW) Software em Execução Uso Interpretação Software Carga... Software Carga Máquina 1 ( MCSW) Software em Execução Interpretação Uso Software Carga Máquina 0 MPU Uso

usuário echo.txt (software) Loader.class (software) input output input output input output Loading Loader (machine) Echo (machine) JVM Java Virtual Machine (machine) Interpretation vc0 (machine) Interpretation java.exe (software) input output cmd (machine) Loading Interpretation Sistema Operacional (machine)

Uma Máquina explorer criada pelo sistema operacional input Usuário do Explorer explorer.exe (software) Read output explorer (machine) Interpretation Usuário do Sistema Operacional input output cmd (machine) Loading Sistema Operacional (machine)

public class Calc { private int estadointeracao; private int operacaoselecionada; private long acumulador0; private long acumulador1; private static final int NENHUMA = 0; private static final int SOMA = 1; private static final int SUBTRACAO = 2; private static final int ACUMULANDO_0 = 0; private static final int ACUMULANDO_1 = 1; public Calc() { long soma() { operacaoselecionada = SOMA; estadointeracao = ACUMULANDO_1; return acumulador0; long um() {return numerodigitado(1); long dois() {return numerodigitado(2); long numerodigitado(int valor) { if (estadointeracao == ACUMULANDO_0) { acumulador0 = acumulador0 * 10 + valor; estadointeracao = ACUMULANDO_0; return acumulador0; else if (estadointeracao == ACUMULANDO_1) { acumulador1 = acumulador1 * 10 + valor; estadointeracao = ACUMULANDO_1; return acumulador1; return 0; long igual() { long resultado = 0; if (operacaoselecionada == SOMA) { resultado = acumulador0 + acumulador1; reset(); return resultado; long reset() { estadointeracao = ACUMULANDO_0; operacaoselecionada = NENHUMA; acumulador0 = 0; acumulador1 = 0; return acumulador0; import java.awt.*; import java.awt.event.*; public class CalcVisual extends Frame { // Cria os painéis Panel panelteclas = new Panel(); Panel panelteclastopo = new Panel(); Panel panelteclasnumericas = new Panel(); // cria os gerenciadores de layout dos painéis BorderLayout BorderLayoutPrincipal = new BorderLayout(); BorderLayout BorderLayoutTodasAsTeclas = new BorderLayout(); GridLayout gridlayoutclearcebackspace = new GridLayout(); GridLayout gridlayoutteclasnumericaseoperacoes = new GridLayout(); // cria a área de display da calculadora TextField textfielddisplay = new TextField(); // cria os botões da calculadora Button buttonbackspace = new Button(); Button buttonc = new Button(); Button buttonce= new Button(); Button button_0 = new Button(); Button button_1 = new Button(); Button button_2 = new Button(); Button button_3 = new Button(); Button button_4 = new Button(); Button button_5 = new Button(); Button button_6 = new Button(); Button button_7 = new Button(); Button button_8 = new Button(); Button button_9 = new Button(); Button button_pontodecimal = new Button(); Button button_igual = new Button(); Button button_soma = new Button(); Button button_subtracao = new Button(); Button button_mult = new Button(); Button button_divisao = new Button(); Button button_percento = new Button(); Button button_raiz = new Button(); Button button_invertesinal = new Button(); Button button_reciproco = new Button(); // cria o "modelo de dados", isto é, o próprio objeto calculadora // que irá efetivamente realizar os cálculos Calc calc = new Calc(); // construtor da parte visual da calculadora public CalcVisual() { try { buildgui(); catch (Exception e) { e.printstacktrace(); /** * Constroi os elementos da interface grafica da calculadora */ private void buildgui() throws Exception { // ajusta as propriedades display Você Usa ou Testa Software? textfielddisplay.settext("0"); // modifica cores de alguns botões buttonbackspace.setforeground(color.red); buttonc.setforeground(color.red); buttonce.setforeground(color.red ); // atribui rótulos aos botões da calculadora buttonc.setlabel("c"); buttonce.setlabel("ce"); buttonbackspace.setlabel(" Backspace"); button_0.setlabel("0"); button_1.setlabel("1"); button_2.setlabel("2"); button_3.setlabel("3"); button_4.setlabel("4"); button_5.setlabel("5"); button_6.setlabel("6"); button_7.setlabel("7"); button_8.setlabel("8"); button_9.setlabel("9"); button_soma.setlabel ("+"); button_igual.setlabel("="); // adiciona alguns botões no painel de teclas superior gridlayoutclearcebackspace.setcolumns (3); panelteclastopo.setlayout(gridlayoutclearcebackspace); panelteclastopo.add(buttonbackspace, null); panelteclastopo.add(buttonce, null); panelteclastopo.add(buttonc, null); // adiciona alguns botões no painel de teclas inferior gridlayoutteclasnumericaseoperacoes.setrows (4); gridlayoutteclasnumericaseoperacoes.setcolumns (5); gridlayoutteclasnumericaseoperacoes.sethgap (4); gridlayoutteclasnumericaseoperacoes.setvgap (4); panelteclasnumericas.setlayout(gridlayoutteclasnumericaseoperacoes); panelteclasnumericas.add(button_7, null ); panelteclasnumericas.add(button_8, null ); panelteclasnumericas.add(button_9, null ); panelteclasnumericas.add(button_divisao, null ); panelteclasnumericas.add(button_raiz, null); panelteclasnumericas.add(button_4, null ); panelteclasnumericas.add(button_5, null ); panelteclasnumericas.add(button_6, null ); panelteclasnumericas.add(button_mult, null); panelteclasnumericas.add(button_percento, null); panelteclasnumericas.add(button_1, null ); panelteclasnumericas.add(button_2, null ); panelteclasnumericas.add(button_3, null ); panelteclasnumericas.add(button_subtracao, null); panelteclasnumericas.add(button_reciproco, null); panelteclasnumericas.add(button_0, null ); panelteclasnumericas.add(button_invertesinal, null); panelteclasnumericas.add(button_pontodecimal, null); panelteclasnumericas.add(button_soma, null); panelteclasnumericas.add(button_igual, null ); // adiciona ao painel geral de todas as teclas // os dois paineis de teclas menores // ajusta as propriedades dos gerenciadores de layout panelteclas.setlayout(borderlayouttodasasteclas ); panelteclas.add(panelteclastopo, BorderLayout.NORTH); panelteclas.add(panelteclasnumericas, BorderLayout.CENTER); // ajusta propriedades gerais visuais da interface this.setsize(250, 275); this.setresizable(false); this.setlayout(borderlayoutprincipal); // adiciona o painel geral de teclas ao centro frame (this) this.add(panelteclas, BorderLayout.CENTER); // adiciona o display ao topo do frame (this) this.add(textfielddisplay, BorderLayout.NORTH); /** * cria os vários tratadores de evento */ // cria o tratador de evento para o botão C (clear) buttonc.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed (ActionEvent e) { buttonc_actionperformed (e); ); // cria o tratador de evento para o botão "1" button_1.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed (ActionEvent e) { button_1_actionperformed (e); ); // cria o tratador de evento para o botão "2" button_2.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed (ActionEvent e) { button_2_actionperformed (e); ); // cria o tratador de evento para o botão "+" button_soma.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed (ActionEvent e) { button_soma_ actionperformed (e); ); // cria o tratador de evento para o botão "-" button_subtracao.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed (ActionEvent e) { button_subtracao _actionperformed (e); ); // cria o tratador de evento para o botão "*" button_mult.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed (ActionEvent e) { button_mult_actionperformed (e); ); // cria o tratador de evento para o botão "/" button_divisao.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed (ActionEvent e) { button_divisao_actionperformed (e); ); // cria o tratador de evento para o botão "=" button_igual.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed (ActionEvent e) { button_igual_actionperformed (e); ); // cria o tratador de evento para o comando de janelas windowclose // (ALT+F4 no windows) this.addwindowlistener(new java.awt.event.windowadapter() { public void windowclosing (WindowEvent e) { this_windowclosing(e); ); // mostra a interface grafica para o usuário show(); // métodos que implementam o tratamento de eventos void this_windowclosing(windowevent e) { System.exit(0); void button_soma_ actionperformed (ActionEvent e) { this.textfielddisplay.settext("" + calc.soma()); void button_subtracao_actionperformed (ActionEvent e) { this.textfielddisplay.settext("" + calc.sub()); void button_mult_actionperformed (ActionEvent e) { this.textfielddisplay.settext("" + calc.mult()); void button_divisao _actionperformed (ActionEvent e) { this.textfielddisplay.settext("" + calc.div()); void button_igual_actionperformed (ActionEvent e) { this.textfielddisplay.settext("" + calc.igual()); void button_1_actionperformed (ActionEvent e) { this.textfielddisplay.settext("" + calc.um()); void button_2_actionperformed (ActionEvent e) { this.textfielddisplay.settext("" + calc.dois()); void buttonc _actionperformed (ActionEvent e) { this.textfielddisplay.settext("" + calc.reset()); public static void main (String[] args) { CalcVisual CalcVisual1 =new CalcVisual();

Usuários e máquinas Usuário Final Uso Máquina intermediadora Usuário Uso Uso Máquina n+1... Software n Carga Softwaren em Execução Interpretação Máquina n... Uso... Software 2 Software 1 Carga Carga Máquina 2 Software1 em Execução u Interpretação Máquina 1 Software0 em Execução Uso Software 0 Carga Interpretação Máquina 0 Hardware Uso

Hierarquia de Máquinas e Linguagens 6 - Interpretação De ED2? Usuário 2? 7 - Entrada de Dados 2 ED2? (sentença escrita em linguagem L2, criada pelo Usuário 1?) Usuário 1 5- Entrada de Dados 1 ED1 (sentença escrita em linguagem L1, criada pelo programador.) 2 Solicita Carga do Programa P0 Saída de Dados (Processo P2?) (Possível execução de ED1, Reconhece ED2 escrita em L2?) 6 - Interpretação de ED1 Processo P1 (Resulta da Execução de ED0, Reconhece ED1 escrita em L1) 4 - Interpretação de ED0 Programa P0, Armazenado 3 Entrada de Dados 0 ED0 (ED0 é uma cópia do programa P0) Máquina Computável M0 (Reconhecedor de ED0) 1 - Programa P0, sentença escrita em uma linguagem computável L0 Programador

Tríade da Prática do Software cliente Restrições De tempo e custo Linguagem máquina desejada Descrição Construtiva de máquina Problemas e Necessidades Máquina possuída desenvolvedor Satisfação final usuário

Evolução Histórica do Software Linguagem máquina desejada Restrições De tempo e custo cliente Descrição Construtiva de máquina Problemas e Necessidades Máquina possuída Linguagem máquina desejada Restrições De tempo e custo cliente Descrição Construtiva de máquina Problemas e Necessidades Máquina possuída desenvolvedor Satisfação final usuário desenvolvedor Satisfação final usuário Tempo 0 Tempo 1 Novos problemas e necessidades A linguagem da máquina desejada é expandida Novas descrições são construídas, sobre as antigas

É Engenharia de Software? Ou Engenharia de Software e Sistemas?

Natureza do Software e dos Sistemas Jorge H C Fernandes