Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Natureza do Software e dos Sistemas
Jorge H C Fernandes
Natureza do Software e dos Sistemas, por 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
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Dificuldadesde 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
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Softwarepublic 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;
import java.awt.*;import java.awt.event.*;public class CalcVisual extends Frame {// Cria os painéisPanel panelTeclas = new Panel();Panel panelTeclasTopo = new Panel();Panel panelTeclasNumericas = new Panel();
// cria os gerenciadores de layout dos painéisBorderLayout BorderLayoutPrincipal = new BorderLayout();BorderLayout BorderLayoutTodasAsTeclas = new BorderLayout ();GridLayout gridLayoutClearCEBackSpace = new GridLayout ();GridLayout gridLayoutTeclasNumericasEOperacoes = new GridLayout();
// cria a área de display da calculadoraTextField textFieldDisplay = new TextField();
// cria os botões da calculadoraButton 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_9.setLabel("9");button_soma.setLabel("+");button_igual.setLabel("=");
// adiciona alguns botões no painel de teclas superiorgridLayoutClearCEBackSpace.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 inferiorgridLayoutTeclasNumericasEOperacoes.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);
// cria o tratador de evento para o botão "2"button_2.addActionListener(new
java.awt.event.ActionListener() {public void actionPerformed(ActionEventbutton_2_actionPerformed(e);
}});// cria o tratador de evento para o botão "+"button_soma.addActionListener(new
java.awt.event.ActionListener() {public void actionPerformed(ActionEventbutton_soma_actionPerformed(e);
}});// cria o tratador de evento para o botão "-"button_subtracao.addActionListener(new
java.awt.event.ActionListener() {public void actionPerformed(ActionEventbutton_subtracao_actionPerformed(e);
}});// cria o tratador de evento para o botão "*"button_mult.addActionListener(new
java.awt.event.ActionListener() {public void actionPerformed(ActionEventbutton_mult_actionPerformed(e);
}
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
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
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
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
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Um Sistema De Computador é uma Máquina
• O Usuário Conversa com a Máquina
Sistema de Computador(Estendido
Pelo Software)
Entrada(input)
Usuário
Saída(output)
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Uma Máquina de Calcular
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Uma Máquina para Analisar Programas Java
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Um Sistema para Desenhar ouMáquina de Desenhar
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Um Sistema ou Máquina para Tratar Imagens
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Um Sistema ou Máquina,que Simula um Celular,
que simula um jogo de damas
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Várias Máquinas Coexistem em um Sistema de Computador em um Mesmo
Instante de Tempo
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
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
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
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)
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
A Linguagem da “Máquina” Paint
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
A Linguagem da “Máquina” Calculadora
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Vamos conversar com Algumas Máquinas?
• Converse com o Paint• Converse com o GIMP• Converse com o Powerpoint!• Converse com o sistema operacional
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
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
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
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
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Máquinas Complexas e Hierarquizadas
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Interpretação do Software
Máquina n+1
MáquinanSoftware Carga
Uso
Usuário
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Software em Execução
Máquinan (MCSW)
Interpretação
Software Carga...
...
Software em Execução
Máquina2 (MCSW)
Interpretação
Software em Execução
Máquina1 (MCSW)
Interpretação
Máquina0
MPUSoftware Carga
Uso
Software Carga
Uso
Uso
Um Sistema Computacional Usual
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Sistema Operacional(machine)
Loadingcmd(machine)
JVM – Java Virtual Machine(machine)
Interpretation
Loader(machine)
Interpretation
input
output
usuário
Echo(machine)
Interpretation
vc0(machine)
Loading
echo.txt(software) input
output
Loader.class(software) input
output
java.exe(software) input
output
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Sistema Operacional(machine)
Interpretation
input
output
cmd(machine)
Loading
Uma Máquina explorer criada pelo sistema operacional
Usuário do Sistema Operacional
explorer.exe(software)
Readexplorer
(machine)
input
outputUsuário do Explorer
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Você Usa ou Testa Software?
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éisPanel panelTeclas = new Panel();Panel panelTeclasTopo = new Panel();Panel panelTeclasNumericas = new Panel();
// cria os gerenciadores de layout dos painéisBorderLayout BorderLayoutPrincipal = new BorderLayout();BorderLayout BorderLayoutTodasAsTeclas = new BorderLayout();GridLayout gridLayoutClearCEBackSpace = new GridLayout();GridLayout gridLayoutTeclasNumericasEOperacoes = new GridLayout();
// cria a área de display da calculadoraTextField textFieldDisplay = new TextField();
// cria os botões da calculadoraButton 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álculosCalc calc = new Calc();
// construtor da parte visual da calculadorapublic CalcVisual() {try {buildGUI();
} catch (Exception e) {e.printStackTrace() ;
}}/*** Constroi os elementos da interface grafica da calculadora*/private void buildGUI() throws Exception {
// ajusta as propriedades displaytextFieldDisplay.setText("0");
// modifica cores de alguns botõesbuttonBackspace.setForeground(Color.red);buttonC.setForeground(Color.red);buttonCE.setForeground(Color.red );
// atribui rótulos aos botões da calculadorabuttonC.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 superiorgridLayoutClearCEBackSpace.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 inferiorgridLayoutTeclasNumericasEOperacoes.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 layoutpanelTeclas.setLayout(BorderLayoutTodasAsTeclas );panelTeclas.add(panelTeclasTopo , BorderLayout.NORTH);panelTeclas.add(panelTeclasNumericas, BorderLayout.CENTER);
// ajusta propriedades gerais visuais da interfacethis .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(WindowEvente) {
this_windowClosing(e);}
});// mostra a interface grafica para o usuárioshow();
}// métodos que implementam o tratamento de eventosvoid 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();
}}
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
u
Usuários e máquinas
Uso
Usuário Final
Máquina intermediadora
Uso
UsuárioUso
Software 2 Carga
Máquina0
Hardware
Software1 em Execução
Máquina 1
Interpretação Uso
Software0 em Execução
Interpretação
Máquina 2
Uso
....
Software n Carga
Softwaren em Execução
Software 1 Carga
Software 0 Carga
........
Máquina n+1
Máquina nInterpretação
Uso
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Hierarquia de Máquinas e Linguagens
Máquina Computável M0(Reconhecedor de ED0)
3 – Entrada de Dados 0 – ED0(ED0 é uma cópia do programa P0)
Processo P1(Resulta da Execução de ED0, Reconhece ED1 escrita em L1)
4 - Interpretação de ED0
5- Entrada de Dados 1 – ED1(sentença escrita em linguagem L1, criada pelo programador.)
6 - Interpretação de ED1
Saída de Dados (Processo P2?)(Possível execução de ED1,
Reconhece ED2 escrita em L2?)
Programa P0,
Armazenado
1 - Programa P0, sentença escrita em uma linguagem computável L0
Programador
2 – Solicita Carga do Programa P0
Usuário 1
7 - Entrada de Dados 2 – ED2?(sentença escrita em linguagemL2, criada pelo Usuário 1?)
Usuário 2?
6 - Interpretação De ED2?
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
usuário
cliente
desenvolvedor
Problemas e Necessidades
DescriçãoConstrutiva de
máquinaMáquina possuída
Linguagemmáquina desejada
RestriçõesDe tempo ecusto
Satisfação final
Tríade da Prática do Software
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
usuário
cliente
desenvolvedor
Problemas e Necessidades
DescriçãoConstrutiva de
máquinaMáquina possuída
Linguagemmáquina desejada
RestriçõesDe tempo ecusto
Satisfação final
Evolução Histórica do Software
Tempo 0
usuário
cliente
desenvolvedor
Problemas e Necessidades
DescriçãoConstrutiva de
máquinaMáquina possuída
Linguagemmáquina desejada
RestriçõesDe tempo ecusto
Satisfação final
Tempo 1Novos problemas e necessidades
A linguagem da máquina desejada é expandidaNovas descrições são construídas, sobre as antigas
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
É Engenharia de Software?Ou Engenharia de Software e
Sistemas?
Natureza do Software e dos Sistemas, por Jorge H C Fernandes
Natureza do Software e dos Sistemas
Jorge H C Fernandes
Top Related