Baixe o app para aproveitar ainda mais
Prévia do material em texto
23 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Unidade II Iniciaremos os nossos estudos apresentando técnicas de programação aplicando‑se a plataforma desktop. Iremos aprender como segregar a estrutura de código C# para que possamos garantir qualidade de desenvolvimento e performance de manutenção. Entendendo as aplicações, torna‑se fácil entender os passos necessários para dar suporte a aplicações e identificar as diversas maneiras pelas quais essas aplicações Windows Form são fornecidas ou implementadas. 3 Linguagem de Programação C# A linguagem de programação C# foi criada para que desenvolvedores pudessem atuar de maneira mais ágil com aplicações web. Dentre os pontos da linguagem, podemos destacar os seguintes: • Linguagem de programação orientada a objetos ideal para desenvolvimento de aplicações web. • É considerada uma evolução do C++, do qual são utilizadas algumas características, como declarações, expressões e operadores. • Utiliza muitas regras de programação para reduzir a possibilidade de erros. • C# também tem como objetivo permitir o desenvolvimento de qualquer tipo de aplicação: web service, aplicação Windows convencional, aplicações para serem executadas num palmtop ou handheld, aplicações para internet etc. 3.1 Histórico e curiosidades • Criada pela Microsoft especificamente para a plataforma .NET. • Iniciada em 1999 por Anders Hejlsberg e equipe, com nome de Cool. • .NET é apresentada em 2000 e linguagem Cool é renomeada para C#. • O símbolo real seria o ♯, e não o #. Porém, devido a limitação de telas, fontes, teclados e alguns navegadores, no momento da normalização junto à ECMA, foi feita a opção pelo #. • Foi criada com base nas linguagens C++ e Java. • Tem como um dos principais editores o Visual Studio. 24 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Saiba mais Para saber mais a respeito do tema, sugerimos a leitura do seguinte artigo: ARAÚJO, E. C. Introdução à linguagem C#. DevMedia, Rio de Janeiro, [s.d.]. Disponível em: <http://www.devmedia.com.br/ introducao‑a‑linguagem‑c/27711>. Acesso em: 9 jun. 2015. 3.2 microsoft Visual Studio O Microsoft Visual Studio é um pacote de programas da Microsoft para desenvolvimento, dedicado ao framework .NET e às linguagens Visual Basic (VB), C, C++, C# e J#. Trata também de desenvolvimento web na plataforma do ASP.NET, tendo como linguagens mais frequentes VB.NET (Visual Basic .Net) e C#. 3.3 Herança Trata‑se da característica mais poderosa e importante da orientação a objetos, pois permite o reaproveitamento de atributos e de métodos, otimizando o tempo de desenvolvimento. Com isso, podemos reduzir significativamente a linha de código. O conceito de herança trabalha com o conceito de superclasse e subclasse. A superclasse é uma classe que possui classes derivadas a partir dela, chamadas de subclasses. Estas, ao serem derivadas de uma superclasse, herdam seus atributos e métodos. Figura 9 – Diagrama de Classe 25 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii A seguir podemos observar alguns exemplos que contextualizam a explicação de herança: Exemplo 1 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine (“ Instancia da Classe Pessoa, {0}!”, Console. ReadLine()); __________.__________ pessoa = new Heranca.______________(); pessoa._______ = “professor unip”; ______.idade = 40; Console.WriteLine (“Pessoa: Nome={0},Idade={1}”, __________.nome, pessoa.__________); Console.WriteLine(); Console.WriteLine(); Console.WriteLine(“ Instancia da Classe Aluno, {0}!”, Console.Read‑ Line()); Heranca.___________ __________ = new Heranca.Aluno(); _____________.nome = “Joaquim”; _____________.idade = 30; aluno.___________________ = “AX3601223‑1”; Console.WriteLine(“Aluno: Nome={0},Idade={1}, Matricula={2}”, alu‑ no._____, ____._____, _____._____); Console.WriteLine(); Console.WriteLine(“ Fim, {0}!”, Console.ReadLine()); } } } namespace Heranca { public class _____________ { //atributos public string __________; public int _____________; //construtor public _____________() { Console.WriteLine(“Construção do objeto Pessoa.”); } } 26 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II public class _____________ : _____________ { //atributo public String __________________; //construtor public Aluno() { Console.WriteLine(“Construção do objeto Aluno.”); } } } Exemplo 2 using System; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { //Início‑com base na herança Console.WriteLine(“ Instancia da Classe Pessoa, {0}!”, Console.Read‑ Line()); ____________.___________ _________ = new ___________.______(“Joa‑ quim”); Console.WriteLine (“Pessoa: Nome {0}”,_________.__________); Console.WriteLine(); Console.WriteLine(“ Instancia da Classe Aluno com base na herança, {0}!”, Console.ReadLine()); __________.________ aluno = new HerancaBase.__________(“090909‑x”, “Silva”); Console.WriteLine(“Aluno com nome {0} e matrícula {1}», aluno.nome, aluno.matricula); //Fim‑com base na herança Console.WriteLine(“ Fim, {0}!”, Console.ReadLine()); } } } namespace HerancaBase { public class __________ { //atributos public string _________; 27 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii public int ____________; //construtor public __________() { //nada } public Pessoa(string n) { this.nome = n; Console.WriteLine(“Construção do objeto Pessoa com parâmetro.”); } } public class _________ : ___________ { //atributo public String ____________; //construtor com base na herança public Aluno(string m, string n) : base(n) { this.matricula = m; Console.WriteLine(“Construção do objeto Aluno com base na herança.”); } } } 3.4 Polimorfismo O conceito está associado à herança e trabalha com a redeclaração de métodos previamente herdados por uma classe. O ponto principal é evitar ter de modificar o código‑fonte; inserindo uma chamada em um método com um nome diferente, redeclara‑se o método com o mesmo nome declarado na superclasse. A seguir podemos observar alguns exemplos que contextualizam a explicação de polimorfismo: Exemplo 1 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication3 { classProgramP { static void Main(string[] args) { 28 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Console.WriteLine(“ Instancia da Classe Familia, {0}!”, Console. ReadLine()); _________._________ familia = new _____________.__________(); familia.pais(); Console.WriteLine(“ Instancia da Classe Continente, {0}!”, Console. ReadLine()); ______________.Continente ____________ = new Polimorfismo. _______________(); continente.________(); Console.WriteLine(“ Instancia da Classe Hemisferio, {0}!”, Console. ReadLine()); Polimorfismo.Hemisferio ______________ = new Polimorfismo.Hemisferio(); ____________.pais(); Console.ReadLine(); } } } namespace Polimorfismo { public class ______________ { public virtual void ___________() { Console.WriteLine(“ Método ‘pais’ do objeto ‘Familia’ “); } } //utilizando o método com o mesmo nome em classes diferentes class ____________ : Familia { public override void ________() { Console.WriteLine(“ Método ‘pais’ do objeto ‘Continente’ “); } } //utilizando o método com o mesmo nome em classes diferentes class Hemisferio : _____________ { public override void _________() { Console.WriteLine(“ Método ‘pais’ do objeto ‘Hemisferio’ “); } } } Figura 10 – Tela Windows Form 29 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Figura 11 – Tela Windows Form: Label Figura 12 – Tela Windows Form: CheckBox selecionado Exemplo 2 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); checkBox1.Checked = false; label1.Text = “”; } private void button1_Click(object sender, EventArgs e) { Polimo.Movimenta __________ = new Polimo.Movimenta(); if (this.checkBox1.Checked){ _________.carro_em_movimento(new Polimo._______()); label1.Text = “O Carro está acelerando.”; } else 30 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II { movimenta.carro_em_movimento(new Polimo.________()); label1.Text = “O Carro está freando.”; } } } } namespace Polimo { //Classe public abstract class Carro { public abstract bool __________(); } //Classe public class Acelerar:Carro { //Usa o mesmo nome do método da Classe Carro public ______________ bool _________() { Console.WriteLine(“O Carro está acelerando.”); return true; } } //Classe public class Frear:Carro { //Usa o mesmo nome do método da Classe Carro public override bool acao() { Console.WriteLine(“O Carro está freando.”); return true; } } //Classe public class Movimenta { public bool carro_em_movimento(_________ car) { return car.___________(); } } } Exemplo 3 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Programh 31 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii { static void Main(string[] args) { //Início‑com base na herança Console.WriteLine(“ Instancia da Classe Pessoa, {0}!”, Console.Read‑ Line()); HerancaBase.Pessoa pessoa = new HerancaBase.Pessoa(“LUIZ”); Console.WriteLine(“Pessoa: Nome {0}”, pessoa.nome); Console.WriteLine(); Console.WriteLine(“ Instancia da Classe Aluno com base na herança, {0}!”, Console.ReadLine()); HerancaBase.Aluno aluno = new HerancaBase.Aluno(“090909‑x”, “Lui‑ gi”); Console.WriteLine(“Aluno com nome {0} e matícula {1}”, aluno.nome, aluno.matricula); //Fim‑com base na herança Console.WriteLine(“ Fim, {0}!”, Console.ReadLine()); } } } namespace HerancaBase { public class Pessoa { //atributos public string nome; public int idade; //construtor public Pessoa() { //nada } public Pessoa(string n) { this.nome = n; Console.WriteLine(“Construção do objeto Pessoa com parâmetro.”); } } public class Aluno : Pessoa { //atributo public String matricula; //construtor com base na herança public Aluno(string m, string n) : base(n) { this.matricula = m; Console.WriteLine(“Construção do objeto Aluno com base na her‑ ança.”); } } } 32 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Exemplo 4 using System; namespace ConsoleApplication3 { class ProgramP { static void Main(string[] args) { Console.WriteLine (“ Instancia da Classe Familia, {0}!”, Console. ReadLine()); Polimorfismo.Familia familia = new Polimorfismo.Familia(); familia.pais(); Console.WriteLine(“ Instancia da Classe Continente, {0}!”, Console. ReadLine()); Polimorfismo.Continente continente = new Polimorfismo.Continente(); continente.pais(); Console.WriteLine(“ Instancia da Classe Hemisferio, {0}!”, Console. ReadLine()); Polimorfismo.Hemisferio hemisferio = new Polimorfismo.Hemisferio(); hemisferio.pais(); Console.ReadLine(); } } } namespace Polimorfismo { public class Familia { //método pais [País ou Pais] public virtual void pais() { Console.WriteLine (“ Método ‘pais’ do objeto ‘Familia’ “); } } //utilizando o método com o mesmo nome em classes diferentes class Continente : Familia { public override void pais() { Console.WriteLine (“ Método ‘pais’ do objeto ‘Continente’ “); } } //utilizando o método com o mesmo nome em classes diferentes class Hemisferio : Familia { public override void pais() { Console.WriteLine (“ Método ‘pais’ do objeto ‘Hemisferio’ “); } } 33 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Figura 13 – Tela Windows Form – Label Figura 14 – Tela Windows Form – CheckBox selecionado Exemplo 5 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent();checkBox1.Checked = false; label1.Text = “”; } private void button1_Click(object sender, EventArgs e) { Polimo.Movimenta movimenta = new Polimo.Movimenta(); if (this.checkBox1.Checked) { 34 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II movimenta.carro_em_movimento(new Polimo.Acelerar()); label1.Text = “O Carro está acelerando.”; } else { movimenta.carro_em_movimento(new Polimo.Frear()); label1.Text = “O Carro está freando.”; } } } } namespace Polimo { //Classe public abstract class Carro { public abstract bool acao(); } //Classe public class Acelerar : Carro { //Usa o mesmo nome do método da Classe Carro public override bool acao() { Console.WriteLine(“O Carro está acelerando.”); return true; } } //Classe public class Frear : Carro { //Usa o mesmo nome do método da Classe Carro public override bool acao() { Console.WriteLine(“O Carro está freando.”); return true; } } //Classe public class Movimenta { public bool carro_em_movimento(Carro car) { return car.acao(); } } } 4 Camada de aPreSentação Em primeiro lugar, é importante sabermos que a Camada de Apresentação é a entrada de dados de uma aplicação. Em muitos momentos ela é apresentada em projetos de software como Front‑End, definida como protótipo na fase de levantamento de requisitos. 35 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Figura 15 – Camada de Apresentação Quadro 2 – Relação Controle versus Tela Controle Name do Controle Text do Controle Form frmNotasUnip Cadastro de Notas GroupBox1 grpNotasSemestre Notas do Semestre Label1 lblNotasP1 NotaP1: Label2 lblNotasP2 NotaP2: Label3 lblMedia Média: ComboBox1 cbxNotaP1 ‑ ComboBox2 cbxNotaP2 ‑ GroupBox2 grpExameFinal Exame Final Label4 lblNotaExame Nota Exame: Button1 btnCalcularMedia Calcular Mé&dia Button2 btnLimpar Lim&par Button3 btnSair Sai&r Button4 btnCalcularExame Calcular &Exame Saiba mais Para saber mais sobre esse assunto, sugerimos a leitura do artigo: JOMORI, S. M.; VOLPE, R. L. D; ZABEU, A. C. P. Qualidade de software. Revista Banas Qualidade, São Paulo, ano 13, n. 141, fev. 2004. 36 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II 4.1 Funções específicas da Camada de apresentação A camada de apresentação é responsável por diversas funções importantes no processo de execução do software: • Pode ser categorizada por processos de aplicação. • Processamento de transações. • Acesso a banco de dados. • Gerência de ações sistêmicas etc. observação Software ou aplicação podem, por meio de uma boa análise efetuada, gerar frutos excepcionais. Uma boa análise equivale a 80% da execução de um projeto, restando apenas 20%, que se destinam à programação. Estudar uma linguagem específica garante conhecimento da tecnologia, ou seja, ganho técnico. Porém, se a análise não andar em paralelo com o código, não será possível aplicar todo o conhecimento técnico para o sucesso da execução do desenvolvimento do software e/ou da aplicação. A camada de apresentação contém os elementos da interface do usuário do site e inclui toda a lógica, que compreende a interação do visitante e das regras de negócio (Windows Form). Podemos definir a Camada de Apresentação, ou Camada do Cliente, ou até mesmo Camada Superior, como a interface com o usuário, que poderia ser considerada até mesmo como as janelas do Windows do nosso aplicativo, por exemplo. Essa camada interage com a Camada de Controle (intermediária) para fazer solicitações e recuperar informações da camada de dados, exibindo‑as para os usuários. Uma segregação de camadas certamente deixa o código com uma leitura e um controle mais fáceis, pois toda a regra está alocada em uma camada isolada. 4.2 Criando a Camada de apresentação Iremos apresentar como será feita a criação da nossa primeira camada de apresentação. A princípio será criado um form para que possamos conhecer alguns componentes. Como primeiro passo, abriremos nosso IDE de programação, chamado Microsoft Visual Studio. 37 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii observação Neste livro‑texto iremos utilizar o Microsoft Visual Studio 2012. Todo e qualquer exemplo e/ou exercício deverá ser executado nessa versão ou em uma superior. Figura 16 – IDE de programação Microsoft Visual Studio 2012 Lembrete Para efeito de padronização e arquitetura de solução, a estrutura de desenvolvimento de softwares terá como referência o MVC (Model, View, Controller), conforme mencionado anteriormente. No entanto, essa arquitetura dará ao estudante uma visualização melhor sobre todos os recursos utilizados neste livro‑texto. Podemos destacar, dentro do Microsoft Visual Studio, pontos que são essenciais para a execução de um bom trabalho para o desenvolvedor: • Solution Explorer (Gerenciador de Soluções): aba em que irá ficar concentrada toda a nossa estrutura de aplicação, desde a camada de apresentação até as classes que serão utilizadas na aplicação. 38 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Figura 17 – Solution Explorer: Gerenciador de Soluções • Toolbox (Barra de Ferramentas): utilizada para que o desenvolvedor possa criar suas telas com base em protótipos elaborados na fase de levantamento de requisitos do projeto de software. Figura 18 – ToolBox: Barra de Ferramentas Para criamos um projeto Windows Form, ou seja, um projeto em que a premissa será elaborar uma aplicação que será executada em ambiente desktop, teremos de seguir estes passos: • Ao iniciar o Microsoft Visual Studio, devemos acionar o link New Project (Novo Projeto), ou no menu superior File (Arquivo) New (Novo) Project (Projeto). 39 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Figura 19 – Tela inicial para adicionar um novo projeto Figura 20 – Rota de menu para adicionar um novo projeto observação A versão do Microsoft Visual Studio utilizada para ilustração deste livro‑texto está em inglês. O autor recomenda a utilização dessa versão, pois ela é encontrada na maioria das empresas que atuam com desenvolvimento de software. 40 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II • Após executar a ação anterior, a seguinte tela deverá ser apresentada: Figura 21 – Caixa inicial de criação de um novo projeto Na figura, podemos nos atentar para alguns detalhes, tais como: • Do lado esquerdo existe um item chamado Templates, onde podemos, por exemplo, definir em qual linguagem iremos atuar. É muito importante atentarmos à linguagem escolhida para que, no momento da codificação, não possamos programar em linguagens diferentes. Figura 22 – Aplicação Visual Basic com código C# 41 Re vi são: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Figura 23 – Templates contidos dentro do Visual C# Podemos notar que existem diversos templates, porém o que iremos utilizar será o Windows Form Application. Para que possamos finalizar o processo de criação do nosso projeto, será necessário atentar para mais alguns itens: • Name (Nome): nome que será colocado no projeto desenvolvido. • Location (Localização): onde ficará alocado o novo projeto. • Solution Name (Nome da Solução): será replicado o Name (Nome) informado para o novo projeto. observação Recomendamos que nunca informe um diretório de pen drive para salvar ou abrir um projeto Windows Form. Como parte das boas práticas, o projeto deve ser criado e/ou alocado em disco local e só depois de todas as alterações efetuadas ser transferido para o pen drive. 42 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Figura 24 – Definição do projeto inicial Após a execução desse passo será apresentada a seguinte tela: Figura 25 – Ambiente de Desenvolvimento Windows Form Quando um projeto Windows Form é adicionado, temos a visualização do Form1, que é adicionado automaticamente. O Form1 nada mais é do que a tela onde o desenvolvedor irá adicionar todos os componentes necessários para a sua funcionalidade. Existe também, dentro do projeto Windows Form, a aba Solution Explorer, que detalha toda a estrutura do projeto. 43 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Figura 26 – Apresentação da Solution Explorer Dentro da Solution Explorer existem alguns itens como: • AplicacaoTeste: nome da aplicação, definida no momento da criação do projeto. • Properties (propriedades): propriedades do projeto. Dentro dela, podemos visualizar cada label utilizado no projeto e configurações realizadas para o funcionamento da aplicação. • References (referências): local onde se armazenam todas as referências utilizadas na execução da aplicação. • App.config: classe que centraliza endereçamentos utilizados no projeto, dentro deles, o endereçamento de banco de dados. • Form1: formulário inicial para desenvolver o layout. • Program: classe que define qual formulário será executado primeiro. Figura 27 – Nome da aplicação – AplicacaoTeste 44 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Figura 28 – Properties (Propriedades) – AplicacaoTeste Figura 29 – References (Referências) – AplicacaoTeste Figura 30 – App.config – AplicacaoTeste 45 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Figura 31 – Classe App.config – AplicacaoTeste Figura 32 – Form1.cs – AplicacaoTeste Figura 33 – Form1 – AplicacaoTeste 46 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Figura 34 – Program.cs – AplicacaoTeste Figura 35 – Classe program.cs – AplicacaoTeste Podemos alterar algumas propriedades do formulário. Na camada de apresentação podemos adicionar n projetos, ou seja, não existe limitação de formulários dentro desse projeto. Para adicionarmos um novo formulário podemos seguir por esta rota: 47 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii • Em cima do projeto AplicacaoTeste, devemos clicar com o botão direito. A seguinte tela será apresentada: Figura 36 – Menu com itens a serem selecionados Figura 37 – Selecionar o item Add Windows Form 48 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Em seguida acionaremos a rota Add New Item, a tela a seguir será apresentada: Figura 38 – Tela para adicionar um novo item ao projeto – AplicacaoTeste Nessa tela, podemos notar que é possível adicionar ao projeto: • classe; • formulário; • classe de componente; • diagrama de classe. Figura 39 – Templates que podem ser adicionados ao projeto – AplicacaoTeste 49 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Após ser adicionado o novo formulário, a Solution Explorer é atualizada com o novo item: Figura 40 – Form2 adicionado à Solution Explorer Podemos alterar o nome do Form1 para que possamos especificar melhor nosso projeto. observação Dentro da Solution Explorer podemos adicionar muitos formulários. No entanto, é muito importante que todos os formulários sejam nomeados para que, no futuro, cada um possa ser atribuído como funcionalidade sistêmica da aplicação. Para que essa ação possa ser efetuada, podemos clicar com o botão direito em cima do nome do formulário e acionar a ação rename (renomear). Figura 41 – Renomear Form1 dentro da Solution Explorer 50 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II observação Como forma de padronização, nomearemos as interfaces iniciando sempre com as letras “frm”, representando a abreviação do termo “formulário”, de forma que auxilie os desenvolvedores a saberem que tudo o que estiver escrito dessa forma deverá ser entendido como implementação de interfaces. Figura 42 – frmMensagem: nome do novo formulário Após ser alterado o nome, acionar o botão enter do teclado. Será apresentada a tela a seguir, perguntando se todas as classes poderão ser renomeadas; acionamos o botão “sim”: Figura 43 – Confirmação da alteração de nome de Form1 para frmMensagem 51 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Para alterarmos o nome da barra de títulos do formulário, deveremos clicar com o botão direito em cima do formulário frmMensagem e acionar o item properties. Figura 44 – Properties (propriedades) do formulário Form1 Será apresentada, ao lado direito da tela, uma aba na qual todas as propriedades serão apresentadas. Figura 45 – Propriedades do formulário 52 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Todo formulário adicionado contém suas respectivas propriedades. Dentre elas, podemos alterar: • Nome do título. • Cor de fundo. • Tamanho do formulário. • Fonte. • Controles do formulário. Figura 46 – Propriedade Text alterada para frmMensagem Quando a propriedade Text foi alterada, automaticamente o título do formulário foi alterado para frmMensagem; assim, no momento de execução, esse é o título que será apresentado. Lembrete Para efeito de padronização, nomeamos as interfaces iniciando sempre com as letras “frm”, representando a abreviação do termo “formulário”. Isso auxilia os desenvolvedores a saberem que tudo o que estiver descrito dessa maneira será entendido como implementação de interfaces. 53 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetosii Figura 47 – Formulário em modo de execução Podemos, por meio de um protótipo desenvolvido na fase de levantamento de requisitos, iniciar a construção da camada de apresentação. Um protótipo é uma visão de como a camada de apresentação será construída dentro do projeto de software. Figura 48 – Protótipo Com base no protótipo, podemos replicar a figura dentro da camada de apresentação utilizando alguns componentes‑padrão do Microsoft Visual Studio. Os componentes que serão utilizados para a construção da camada de apresentação são: 54 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II • Label: responsável por alocar um rótulo na camada de apresentação. • TextBox: responsável por adicionarmos dados de entrada e saída na camada de apresentação. • Button: responsável por executar a ação desenvolvida na linguagem determinada. Esses componentes estão contidos no ToolBox (barra de ferramentas). Figura 49 – Componente Label Figura 50 – Componente TextBox Figura 51 – Componente Button observação Os componentes estão alocados na barra de ferramentas, no item Common Controls. Iremos iniciar clicando no componente Label e arrastando para o formulário. Todos os componentes têm como premissa o comportamento de orientação a objeto, ou seja, todos os componentes são objetos com as suas respectivas propriedades. Todo componente tem, em suas propriedades, cor, tamanho, posicionamento etc. 55 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Figura 52 – Formulário com label1 Para que o label1 seja apresentado conforme o protótipo anterior devemos alterar a sua propriedade de nome. Para isso, em cima do label, iremos clicar com o botão direito do mouse, assim sendo apresentado um menu. Figura 53 – Menu de ações do label1 Ao ser apresentado esse menu, iremos clicar em Propriedades. Nesse momento, para o label1, serão visualizadas todas as propriedades para esse componente. 56 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Figura 54 – Propriedades do componente label1 Podemos visualizar diversas propriedades atribuídas ao componente label1. Nesse primeiro momento iremos alterar as propriedades Name e Text. Figura 55 – Propriedade Text do componente label1 Nesse momento, ao ser alterada a propriedade text do componente label1, automaticamente, no formulário, é replicada e visualizada a alteração. Após essa ação iremos alterar a propriedade name do componente label1, que será chamado de lblDigiteMensagem. 57 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Figura 56 – Propriedade Name do componente label Essa alteração é necessária para um bom entendimento do código. Iremos acompanhar mais à frente que todos os componentes deverão ser nomeados de uma maneira amigável para que possa facilitar o desenvolvimento e a manutenção do código. Quadro 3 – Detalhes de componentes Componente Name Text Label lblDigiteMensagem Digite uma Mensagem: TextBox txtDigiteMensagem N/A Button btnOk Ok Podemos perceber que, para cada componente, sempre o seu name irá se iniciar com uma identificação que remeta ao nome do componente. Exemplo: no caso do nome lblDigiteMensagem, as letras “lbl” seriam uma espécie de abreviação de label; já no caso de btnDigiteMensagem, as letras “btn” seriam a referência ao componente button. observação Não é uma regra trabalhar com abreviação de componentes. Caso o desenvolvedor se sinta confortável, nem precisa alterar o seu name. Porém, devemos pensar que podem existir aplicações nas quais, dentro do formulário, podem existir dez TextBox e, como cada vez que é adicionado um componente o Microsoft Visual Studio adiciona o número 1 (como textbox1, textbox2, textbox3 etc.), como identificar, por exemplo, qual textbox equivale ao nome do usuário ou ao login do usuário? 58 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Agora será adicionado o Textbox. Para isso, iremos localizar o componente na barra de ferramentas e arrastar para o nosso formulário. Figura 57 – Text adicionado ao formulário Para esse componente, será alterado o seu name. Para essa ação, iremos clicar com o botão direito do mouse e será aberto um menu de ações desse componente: Figura 58 – Menu de ações do componente TextBox Após esta ação será acionada a propriedade do componente TextBox. Serão abertas todas as propriedades desse componente: 59 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Figura 59 – Propriedades do componente TextBox Após a janela de propriedades ser apresentada, iremos alterar a sua propriedade name para txtDigiteMensagem. Figura 60 – Propriedade Name alterada para txtDigiteMensagem Agora iremos adicionar o nosso terceiro componente no formulário chamado button. Para isso iremos até a barra de ferramentas, clicaremos no componente button e vamos arrastá‑lo até o formulário. 60 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Figura 61 – Componente button adicionado ao formulário Depois, iremos acessar as propriedades do componente button. Para isso, iremos clicar com o botão direito em cima do componente button e acionar o item Propriedades. Figura 62 – Menu de ações do componente button 61 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Figura 63 – Propriedades do componente button Para esse componente iremos alterar as propriedades name e text, conforme protótipo apresentado anteriormente. Figura 64 – Propriedade name do componente button alterada 62 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Figura 65 – Propriedade text do componente button alterada Após serem efetuadas todas as inclusões de componentes no formulário, teremos nossa camada de apresentação fiel ao protótipo apresentado. Figura 66 – Camada de apresentação 63 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Para que possamos visualizar a nossa aplicação devemos acionar o botão “executar”, que fica no menu superior do Microsoft Visual Studio. Nesse instante acontecerá uma simulação do comportamento da aplicação, como se ela estivesse instalada, por exemplo, em uma estação de trabalho. Figura 67 – Botão Start, que executa aplicação Figura 68 – AplicacaoTeste sendo executada Podemos imprimir a mensagem “Professor” dentro de um label. Para isso seguiremos o escopo a seguir: • Digitar uma mensagem na caixa de texto. 64 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II • Acionar o botão Ok. • Apresentar a mensagem por meio de uma label. Iremos adicionar uma label logo abaixo da caixa de texto: Figura 69 – Label1 inserida no formulário Serão alteradas as propriedades Name e Text para identificarmos o componente adicionado aoformulário. Para essa ação iremos clicar com o botão direito em cima do componente label1 e acionaremos o item Properties (Propriedades). Figura 70 – Menu de ações do componente label1 65 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Figura 71 – Text lblMensagem Figura 72 – Name lblMensagem Nesse momento, atendemos parcialmente o requisito solicitado. Nesse instante iremos iniciar a codificação. Para isso, acionaremos o botão OK, efetuando um duplo clique. 66 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Figura 73 – Modo de codificação Para que possamos entender melhor o cenário proposto, quando o usuário digitar uma mensagem e acionar o botão Ok, a mensagem deverá ser apresentada dentro do label lblmensagem. Inicialmente, para que possamos efetuar o entendimento do código, vamos pensar em um código estruturado. Início Digite uma mensagem Mensagem é transferida para label lblMensagem Fim Para que essa ação possa ser concretizada no código, digitaremos a seguinte instrução: Figura 74 – Código do botão OK 67 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii O entendimento do código poderia ser feito da seguinte maneira: • lblMensagem.Text: neste trecho estamos informando ao código C# o nome do componente (lblMensagem) e sua propriedade (Text). Quando a propriedade informada for Text, poderemos entender que ela irá receber dados alfanuméricos (String). • txtDigiteMensagem.Text: neste trecho estamos informando ao código C# o nome do componente (txtDigiteMensagem) e sua propriedade (Text). Quando a propriedade informada for Text, poderemos entender que ela irá receber dados alfanuméricos (String). Resumido a ação codificada, tudo o que estiver sendo informado no componente txtDigiteMensagem será enviado para o componente lblMensagem. Vamos executar nossa aplicação: Figura 75 – AplicacaoTeste sendo executada Após digitar a palavra “Professor” na caixa de texto, acionaremos o botão OK. Perceba que existe no formulário o label lblMensagem. 68 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Figura 76 – Label recebe palavra digitada na caixa de texto Nesse instante, após o botão Ok ser acionando, o label lblMensagem mudou para a palavra “Professor”, que foi digitada na caixa de texto. Vamos exercitar. A partir de um protótipo construído após efetuado um levantamento de requisitos, iremos construir uma calculadora, onde teremos as operações básicas da matemática: adição, subtração, divisão e multiplicação. Vamos observar o protótipo construído: Figura 77 – Protótipo Calculadora 69 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Para a efetivação do código, iremos iniciar pela análise do protótipo. Na figura podemos observar que existem: • Três labels. • Quatro botões. Quadro 4 – Componentes Componente Nome Texto Label lblDigitePrimeiroNumero Digite o primeiro número Label lblDigiteSegundoNumero Digite o segundo número Label lblResultado Resultado Button btnAdicao + Button btnSubtracao ‑ Button btnMultiplicação * Button btnDivisao / Vamos programar: 1. Crie um novo projeto (Windows FormApplication), com o nome de Calculadora. 2. Altere a propriedade Text do formulário para Calculadora. Figura 78 – Projeto Windows Form Application: calculadora 70 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II 3. Agora iremos inserir os componentes dentro do formulário, conforme protótipo apresentado anteriormente. Figura 79 – Formulário Calculadora Podemos notar que todos os componentes inseridos no formulário estão sem o nome; para isso, em todos os componentes, iremos alterar as propriedades Name e Text: Figura 80 – Alterando propriedade Text do botão Adicionar 71 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Figura 81 – Propriedade Name alterada no botão Adicionar Para todos os componentes de tela iremos alterar as propriedades Name e Text e, para isso, iremos para cada componente, clicar com o botão direito e, em seguida, em Properties: Figura 82 – Properties (propriedades) do botão Adicionar Após a execução desse passo, todos os componentes serão alterados e apresentados conforme figura a seguir: 72 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Figura 83 – Calculadora com todos os componentes adicionados Vamos iniciar a codificação dos botões da nossa calculadora, mas, antes, precisamos entender alguns pontos importantes: • Todo número, a princípio, só poderá ser matematicamente operado se for, no mínimo, do tipo inteiro. • Caixas de texto recebem somente string. Para iniciarmos o entendimento de como as operações matemáticas serão efetuadas, precisamos entender o conceito de Tipos Primitivos, que são atribuições dadas a variáveis que auxiliam na codificação C#. Exemplo: precisamos somar dois valores contidos em caixas de texto. Valor A: 10. Valor B: 10. Resultado: 20. Para que essa conta possa ser executada no código C#, podemos inicialmente declarar duas variáveis do tipo primitivo inteiro. 73 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Quadro 5 - Tipos primitivos Tipo Faixa de Valores Armazenamento byte ‑128 a 127 Inteiro de 8 bits short ‑32.768 a 32.767 Inteiro de 16 bits int ‑2.147.483.648 a 2.147.483.647 Inteiro de 32 bits long ‑9.223.372.036.854.775.808 a9.223.372.036.854.775.807 Inteiro de 64 bits float 1.401298464324811707e‑45 a 3.40282346638528860e+38 Ponto flutuante de 32 bits double 4.94065645841246544e‑324 a 1.79769313486231570e+308 8 bytes ou 64 bits char Representam um único caractere 16 bits boolean True ou False 1 bit Escrevendo nosso código, em Português Estruturado, ficaria: Inicio Linha1: Var valorA inteiro; Linha2: Var ValorB inteiro; Linha3: Var resultado inteiro; Linha4: valorA = CaixaTexto(Valor A)(Inteiro); Linha5: valorB = CaixaTexto(Valor B)(Inteiro); Linha6: Resultado = valorA + valorB; Linha7: CaixaTexto(resultado) = resultado(String); Fim observação Português Estruturado ou pseudocódigo é uma sequência de instruções que pode ser entendida por programadores, independentemente da linguagem de programação utilizada. 74 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Vamos entender a codificação. Linhas 1, 2 e 3 Foram declaradas as variáveis valorA, valor e resultado do tipo inteiro, ou seja, será por meio dessas variáveis que serão feitas a atribuição de valores e a execução da operação matemática soma. Linhas 4, 5 e 6 As variáveis valorA e valorB receberam os dados digitados nas Caixas de Texto A e B, porém elas deverão ser convertidas para o tipo primitivo inteiro, pois o seu conteúdo é do tipo string. observação Esse item será mais bem‑detalhado quando efetuarmos a codificação na linguagemC#. Linha 6 A variável resultado irá receber o resultado da soma das variáveis valorA e valorB. Linha 7 A Caixa de Texto Resultado irá receber a variável resultado, porém deverá ser feita uma conversão do tipo inteiro para o tipo string. Com o Português Estruturado em mãos, vamos iniciar a codificação utilizando a linguagem C#. O botão Soma (+) será o primeiro a ser codificado. Para isso iremos clicar duas vezes no botão (+) para que possamos ser redirecionados para o módulo de codificação. 75 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Figura 84 – Modo codificação Nesse instante estamos dentro da classe do nosso formulário Calculadora. Quando efetuarmos o duplo clique no botão (+) do formulário, a aplicação irá nos direcionar até o evento do botão. Podemos notar que o evento ao qual fomos direcionados, por padrão, é o evento Click, ou seja, no momento em que o formulário estiver sendo executado e o botão (+) for acionado, será disparado o evento e executado tudo o que estiver codificado dentro dele. Para o componente botão adicionado no formulário existem inúmeros eventos. Para que possamos visualizar os eventos do botão, podemos clicar com o botão direito do mouse em cima do botão e acionar o item Properties. 76 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Figura 85 – Properties do botão (+) Logo abaixo do topo da janela Properties, existe um ícone com um símbolo de raio, que equivale aos eventos que podem ser atribuídos ao botão. Figura 86 – Eventos do botão (+) 77 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Na figura, podemos observar que o evento que está acionado é o Click, no qual iremos codificar inicialmente. Existem diversos eventos que podemos utilizar para a ação de um botão. Após estarmos dentro do evento click do botão (+) iniciaremos o desenvolvimento do nosso código. Lembrete Observe que o botão (+) está com o name btnMais, ou seja, para qualquer dúvida, estamos programando dentro do evento click do botão (+). Esse name foi atribuído à propriedade, facilitando o trabalho de codificação e de documentação. Não é uma regra trabalhar com abreviação de componentes. No entanto, devemos pensar que podem existir aplicações nas quais, dentro do formulário, pode haver inúmeros itens que precisem ser organizados para auxiliar o trabalho do desenvolvedor. A primeira etapa é declararmos variáveis que receberão o conteúdo digitado em tela: Figura 87 – Declaração de variáveis Podemos perceber que as variáveis valor1, valor2 e resultado foram declaradas com o tipo primitivo int (inteiro), ou seja, a soma somente irá aceitar números inteiros. Mais um detalhe é que nossas variáveis estão marcadas em verde; isso é uma ação que o Visual Studio realiza quando uma variável é declarada, porém não utilizada na estrutura de codificação. 78 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II A segunda etapa é receber da calculadora os valores informados em tela: Figura 88 – Variáveis recebendo valores informados na tela Nota‑se que as palavras txtDigitePrimeiroNumero.Text e txtDigiteSegundoNumero.Text estão sublinhadas em vermelho; vamos entender: • Estamos enviando um conteúdo string para uma variável que foi declarada como tipo primitivo inteiro. • Precisamos atribuir o contexto string à variável inteiro para que o cálculo possa ser realizado. Para isso precisamos converter (transformar) o tipo primitivo string, que está na propriedade text, para o tipo primitivo inteiro. Com esse objetivo iremos escrever a seguinte linha: 79 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Figura 89 – Convertendo tipo primitivo (String para Inteiro) Iremos utilizar Convert.ToInt16 para que possamos pegar o conteúdo informado dentro do componente text para o tipo primitivo inteiro, assim iremos conseguir efetuar, inicialmente, a soma de valores. Após essa ação nosso código prosseguirá da seguinte maneira: Figura 90 – Variável resultado recebendo o valor da soma 80 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Após definido o código, precisamos informar o resultado dentro do componente text e, para isso, iremos efetuar o processo inverso de transformação de tipo primitivo, ou seja, nosso código terá o seguinte comportamento: Figura 91 – Componente Text recebendo o valor da variável resultado Podemos perceber que, para o componente text (txtResultado.Text), a variável foi transformada do tipo primitivo inteiro para o tipo primitivo string, assim podendo ser visualizada dentro do componente text no momento de sua execução. Agora iremos executar a nossa aplicação acionando a tecla F5. Figura 92 – Aplicação em modo de execução 81 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Nesse momento, nossa aplicação está rodando e iremos informar dois valores para efetuarmos a nossa soma: Figura 93 – Valores sendo informados na caixa de texto Após informarmos os valores iremos acionar o botão (+) da tela. Nesse instante nosso código será executado, e o valor da soma será apresentado na caixa de texto Resultado: Figura 94 – Valor da soma apresentado na caixa de texto 82 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Para as operações de subtração e multiplicação o comportamento do código será muito semelhante à ação de soma. Para a ação de multiplicação, iremos clicar duas vezes no botão (*) e programar o seguinte código: Figura 95 – Código que efetua a multiplicação de valores Figura 96 – Valor da multiplicação apresentado na caixa de texto Resultado 83 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Figura 97 – Código que efetua a subtração de valores Figura 98 – Valor da subtração apresentada na caixa de texto Resultado Nesse instante será efetuado o teste para divisão. No entanto, neste caso, precisamos tomar alguns cuidados específicos. Dentre eles, considerar a questão: todo número é divisível por zero (0)? Saiba mais Leia o artigo de Gabriel Alessandro de Oliveira, para entender um pouco mais sobre o tema. Ele está disponível no seguinte endereço: 84 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL (UFRGS). Calculando com o zero: dividindo por zero. Porto Alegre: UFRGS, [s.d.]. Disponível em: <http://www.mat.ufrgs.br/~portosil/passa7d.html>. Acesso em: 22 jun. 2015. Vamos rodar nossa solução para verificar o comportamento do nosso código: Figura 99 – Divisão não pode ser realizada Ao ser realizada a divisão 10/0 surge uma mensagem no código informando que a divisão por zero não pode ser realizada, mas como podemos tratar esse erro? 4.3 desvios condicionais 4.3.1 Desvios condicionais (Comandos de Seleção) Além dos algoritmos sequenciais, também denominados lineares, há problemase situações que necessitam da introdução de comandos de seleção (desvios condicionais simples e desvios condicionais compostos) para que as decisões possam ser tomadas. No caso da aplicação que estamos desenvolvendo, precisamos criar um “desvio” para a condição de divisão por zero (0). 4.3.2 Condição Chamamos de condição a expressão lógica que norteia a tomada de certa decisão, ou seja, precisamos definir uma expressão que direcione a solução do item divisão por zero (0). 85 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Por exemplo: imagine que, após a realização do exame final, a média mínima para que um aluno seja aprovado em determinada disciplina seja igual a 5. Se chamarmos de M a variável que indica a média do aluno, teremos que a condição para que o estudante seja aprovado é M>=5. Em outras palavras, a expressão lógica que norteia a tomada de decisão (ser aprovado ou ser reprovado) é M >= 5. Para o cenário que existe em nosso exemplo da calculadora podemos iniciar a expressão considerando que o valor2 deverá ser maior que zero (0): valor2 > 0. 4.3.3 Decisão A decisão é tomada em função de uma condição ser ou não satisfeita. Assim, a tomada de decisão implica a escolha de qual trecho do algoritmo deve ser executado de acordo com o resultado obtido e com a sua comparação a uma condição estabelecida. A condição que oferece o critério de decisão é satisfeita ou não, ou seja, admitem‑se apenas duas respostas possíveis. Assim, a decisão envolverá, no máximo, duas opções: uma ação no caso de a condição ser verdadeira (V) e outra no caso de a condição ser falsa (F). Nessas situações, temos o chamado desvio condicional composto. Há casos que apresentam somente a primeira alternativa: neles, se a condição for falsa (F), o algoritmo continuará o fluxo de instruções posteriores ao desvio condicional. Nessas situações, temos o chamado desvio condicional simples. Em vez de usarmos as notações de condição verdadeira, indicada por (V), e de condição falsa, indicada por (F), podemos utilizar, respectivamente, “sim” (S) e “não” (N). 4.3.4 Desvio condicional simples O desvio condicional simples é uma estrutura utilizada em algoritmos e programas computacionais na qual se indica uma tomada de decisão, ou seja, um algoritmo é executado caso determinada condição seja verdadeira (V). A seguir apresentamos a sintaxe do desvio condicional simples para programas elaborados em Português Estruturado. Lembrete Português Estruturado ou pseudocódigo é uma sequência de instruções que pode ser entendida por programadores, independentemente da linguagem de programação utilizada. 86 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II Se (CONDIÇÃO) então <instruções a serem executadas no caso de a condição ser verdadeira>; Fim_se; Genericamente, o fluxograma relacionado ao desvio condicional simples é o mostrado na figura a seguir. observação Fluxograma é uma representação gráfica de um procedimento, problema ou sistema cujas etapas ou módulos são ilustrados de forma encadeada por meio de símbolos geométricos interconectados para a representação de um algoritmo. Figura 100 – Exemplo de desvio condicional simples 4.3.5 Desvio condicional composto O desvio condicional composto é uma estrutura utilizada em algoritmos e programas computacionais. Nela, indica‑se uma tomada de decisão de executar um trecho do algoritmo caso determinada condição seja verdadeira (V) e outra tomada de decisão de executar outro trecho do algoritmo caso essa condição seja falsa (F). A seguir, apresenta‑se a sintaxe do desvio condicional composto para programas elaborados em Português Estruturado. 87 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Se (CONDIÇÃO) então <instruções a serem executadas no caso de a condição ser verdadeira>; Senão <instruções a serem executadas no caso de a condição ser falsa>; Fim_se; Genericamente, o fluxograma relacionado ao desvio condicional composto é o mostrado na figura a seguir: Figura 101 – Exemplo de desvio condicional composto 4.3.6 Operadores Lógicos O uso combinado dos diversos tipos de operadores proporciona a execução das tarefas mais comuns de processamento de dados. Quadro 6 – Operadores lógicos OPERADOR OPERAÇÃO E (AND) COJUNÇÃO LÓGICA OU (OR) DISJUNÇÃO LÓGICA NÃO (NOT) NEGAÇÃO 88 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II A prioridade dos operadores lógicos é a seguinte: • Prioridade mais alta: NOT. • Prioridade média: AND. • Prioridade mais baixa: OR. Para iniciarmos a resolução do problema de divisão por zero (0), iremos pensar na seguinte estrutura: • Criar uma condicional simples para que possamos tratar dessa situação, conforme ilustra a figura. Figura 102 – Código C# com condicional simples Para entendermos melhor o código apresentado vamos seguir com a análise: • A variável valor2 recebe o conteúdo da caixa de texto txtDigiteSegundoNumero. • Após a variável valor2 estar carregada, é feita a seguinte validação: se valor2 for diferente (!=) de zero (0), então efetue o cálculo e apresente o valor na caixa de texto txtResultado. Efetuando o teste, iremos obter o seguinte cenário: 89 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Figura 103 – Cenário de sucesso Figura 104 – Cenário de falha Podemos perceber que o cálculo não foi efetuado, porém nenhuma mensagem foi informada para o usuário que está interagindo com o sistema. Para isso teremos de aplicar como solução a condicional composta. Vamos efetuar uma análise: • Se o valor2 recebido pela caixa de texto txtDigiteSegundoNumero for diferente (!=) de zero (0), então deverá ser feito o cálculo e apresentado o resultado na caixa de texto txtResultado. 90 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Unidade II • Senão, ou seja, se valor2 recebido pela caixa de texto txtDigiteSegundoNumero for igual (==) a zero (0), então deverá ser exibida uma mensagem para o usuário informando que não existe a possibilidade de efetuar o cálculo desejado. Como essa ação deverá ser codificada? Vamos analisar a figura a seguir: Figura 105 – Código C# com condicional composta Vamos executar o código para entendermos melhor: Figura 106 – Apresentação do cenário com falha 91 Re vi sã o: R os e C. - D ia gr am aç ão : J ef fe rs on - 2 3/ 06 /1 5 Programação orientada a objetos ii Para que possamos entender o código criado, colocamos a condicional composta da seguinte maneira: • Se a condição for atendida, o cálculo será realizado, senão será exibida uma mensagem, utilizando o método messagebox.show. Saiba mais Leia a definição do método MessageBox.Show para entender um pouco mais sobre o tema: MÉTODO MessageBox.Show. Microsoft Developer Network. 2015. Disponível em: <https://msdn.microsoft.com/pt‑br/library/system.windows. forms.messagebox.show%28v=vs.110%29.aspx>. Acesso em: 10 jun. 2015. resumo Abordamos os principais conceitos da disciplina de Programação Orientada a Objetos II, utilizando como conceito a linguagem de programação C#. Entendemos que a construção de uma classe e todo o seu processo de transformaçãoem cada objeto tem por finalidade criar mecanismos que possam interagir entre aplicação e usuário. Também foram abordados conceitos de atributos de classes, que, por sua vez, são características de uma classe que tem como premissa a interação com métodos construídos. Também foram apresentadas técnicas de desenvolvimento na linguagem C#, bem como a apresentação da IDE Microsoft Visual Studio, seus recursos e conceitos iniciais para o desenvolvimento de aplicação utilizando o template Windows Form. Conhecemos também desvios condicionais que irão possibilitar tomadas de decisões desenvolvidas na linguagem C# e seus operadores lógicos, que serão capazes de auxiliar o desenvolvimento de aplicações, bem como, ao final de sua codificação, apresentar, por exemplo, uma mensagem de retorno do desvio codificado. Encerramos vendo a importância do entendimento do português estruturado, que será uma derivação para o código na linguagem C#, bem como a segregação de código, utilizando como recurso de aprendizado o MVC (Model, View, Controller).
Compartilhar