C# e Orientação a Objetos

download C# e Orientação a Objetos

of 188

description

C# e Orientação a Objetos

Transcript of C# e Orientação a Objetos

  • TREINAMENTOS

    C# e Orientao a Objetos

  • C# e Orientao a Objetos

    14 de junho de 2015As apostilas atualizadas esto disponveis em www.k19.com.br

    Sumrio i

    Sobre a K19 1

    Seguro Treinamento 2

    Termo de Uso 3

    Cursos 4

    Preparao do ambiente 5

    1 Introduo 71.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.2 Orientao a Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.3 Plataforma .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.4 Plataforma .NET VS Orientao a Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    2 Lgica 92.1 O que um Programa? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2 Linguagem de Mquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.3 Linguagem de Programao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.4 Compilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.5 Mquinas Virtuais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.6 Exemplo de programa C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.7 Mtodo Main - Ponto de Entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.8 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.9 Variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.10 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.11 IF-ELSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.12 WHILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.13 FOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.14 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    www.facebook.com/k19treinamentos i

  • SUMRIO ii

    2.15 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    3 Orientao a Objetos 273.1 Domnio e Aplicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.2 Objetos, Atributos e Mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.3 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303.4 Referncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.5 Manipulando Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.6 Valores Padro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.7 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.8 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.9 Relacionamentos: Associao, Agregao e Composio . . . . . . . . . . . . . . . . . . 403.10 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.11 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433.12 Mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433.13 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453.14 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463.15 Sobrecarga (Overloading) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.16 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.17 Construtores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493.18 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523.19 Referncias como parmetro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553.20 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553.21 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

    4 Arrays 594.1 Criando um array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594.2 Modificando o contedo de um array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604.3 Acessando o contedo de um array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604.4 Percorrendo um Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614.5 foreach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624.6 Operaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624.7 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624.8 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

    5 IDE - Integrated Development Environment 655.1 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

    6 Atributos e Mtodos de Classe 716.1 Atributos Estticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716.2 Mtodos Estticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726.3 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736.4 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

    7 Encapsulamento 777.1 Atributos Privados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777.2 Mtodos Privados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787.3 Mtodos Pblicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787.4 Implementao e Interface de Uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797.5 Por qu encapsular? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

    ii www.k19.com.br

  • iii SUMRIO

    7.6 Celular - Escondendo a complexidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797.7 Carro - Evitando efeitos colateiras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807.8 Mquinas de Porcarias - Aumentando o controle . . . . . . . . . . . . . . . . . . . . . . . 817.9 Acessando ou modificando atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827.10 Propriedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837.11 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 847.12 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

    8 Herana 878.1 Reutilizao de Cdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878.2 Uma classe para todos os servios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878.3 Uma classe para cada servio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888.4 Uma classe genrica e vrias especficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898.5 Preo Fixo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918.6 Reescrita de Mtodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918.7 Fixo + Especfico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928.8 Construtores e Herana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938.9 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948.10 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

    9 Polimorfismo 999.1 Controle de Ponto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999.2 Modelagem dos funcionrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009.3 UM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009.4 Melhorando o controle de ponto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019.5 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029.6 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

    10 Classes Abstratas 10510.1 Classes Abstratas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10510.2 Mtodos Abstratos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10610.3 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10710.4 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

    11 Interfaces 11111.1 Padronizao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11111.2 Contratos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11111.3 Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11211.4 Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11311.5 Interface e Herana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11411.6 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

    12 Namespace 11912.1 Organizao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11912.2 O comando namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11912.3 Namespaces Encadeados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11912.4 Namespace global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12012.5 Unqualified Name vs Fully Qualified Name . . . . . . . . . . . . . . . . . . . . . . . . . . 12012.6 Using . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12112.7 Nveis de visibilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

    www.facebook.com/k19treinamentos iii

  • SUMRIO iv

    12.8 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

    13 Exceptions 12513.1 Exceptions e SystemExceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12513.2 Lanando erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12613.3 Capturando erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12613.4 finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12713.5 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

    14 Object 12914.1 Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12914.2 O mtodo ToString() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13014.3 O mtodo Equals() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13214.4 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

    15 String 13715.1 Imutabilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13715.2 Mtodos e Propriedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13715.3 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

    16 Entrada e Sada 14116.1 Leitura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14116.2 Escrita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14116.3 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14216.4 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

    17 Collections 14517.1 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14517.2 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14817.3 Generics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14917.4 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15117.5 Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15217.6 Colees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15217.7 Lao foreach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15317.8 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

    18 Threads 15518.1 Definindo Tarefas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15518.2 Executando Tarefas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15618.3 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15618.4 Controlando a Execuo das Tarefas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15718.5 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

    A Quizzes 161

    B Respostas 163

    iv www.k19.com.br

  • 1 SUMRIO

    Sobre a K19

    A K19 uma empresa especializada na capacitao de desenvolvedores de software. Sua equipe composta por profissionais formados em Cincia da Computao pela Universidade de So Paulo(USP) e que possuem vasta experincia em treinamento de profissionais para rea de TI.

    O principal objetivo da K19 oferecer treinamentos de mxima qualidade e relacionados s prin-cipais tecnologias utilizadas pelas empresas. Atravs desses treinamentos, seus alunos tornam-secapacitados para atuar no mercado de trabalho.

    Visando a mxima qualidade, a K19 mantm as suas apostilas em constante renovao e melho-ria, oferece instalaes fsicas apropriadas para o ensino e seus instrutores esto sempre atualizadosdidtica e tecnicamente.

    www.facebook.com/k19treinamentos 1

  • SUMRIO 2

    Seguro Treinamento

    Na K19 o aluno faz o curso quantas vezes quiser!

    Comprometida com o aprendizado e com a satisfao dos seus alunos, a K19 a nica que pos-sui o Seguro Treinamento. Ao contratar um curso, o aluno poder refaz-lo quantas vezes desejarmediante a disponibilidade de vagas e pagamento da franquia do Seguro Treinamento.

    As vagas no preenchidas at um dia antes do incio de uma turma da K19 sero destinadas aoalunos que desejam utilizar o Seguro Treinamento. O valor da franquia para utilizar o Seguro Treina-mento 10% do valor total do curso.

    2 www.k19.com.br

  • 3 SUMRIO

    Termo de UsoTermo de Uso

    Todo o contedo desta apostila propriedade da K19 Treinamentos. A apostila pode ser utilizadalivremente para estudo pessoal . Alm disso, este material didtico pode ser utilizado como materialde apoio em cursos de ensino superior desde que a instituio correspondente seja reconhecida peloMEC (Ministrio da Educao) e que a K19 seja citada explicitamente como proprietria do material.

    proibida qualquer utilizao desse material que no se enquadre nas condies acima semo prvio consentimento formal, por escrito, da K19 Treinamentos. O uso indevido est sujeito smedidas legais cabveis.

    www.facebook.com/k19treinamentos 3

  • SUMRIO 4

    K01- Lgica de Programao

    K11 - Orientao a Objetos em Java

    K12 - Desenvolvimento Web com JSF2 e JPA2

    K21 - Persistncia com JPA2 e Hibernate

    K22 - Desenvolvimento Web Avanado com JFS2, EJB3.1 e CDI

    K23 - Integrao de Sistemas com Webservices, JMS e EJB

    K31 - C# e Orientao a Objetos

    K32 - Desenvolvimento Web com ASP.NET MVC

    TREINA

    MENT

    OS

    TREINAMENTOSTREINAMENTOS Conhea os nossos cursos

    www.k19.com.br/cursos

    K02 - Desenvolvimento Web com HTML, CSS e JavaScript

    K03 - SQL e Modelo Relacional

    K41 - Desenvolvimento Mobile com Android

    K51 - Design Patterns em Java

    K52 - Desenvolvimento Web com Struts

    4 www.k19.com.br

  • 5 SUMRIO

    Preparao do ambiente

    Para realizar os exerccios desta apostila, voc deve utilizar o sistema operacional Windows 7 ouWindows 8. Siga os tutoriais abaixo para preparar o seu ambiente.

    www.k19.com.br/artigos/como-instalar-o-notepad-plus-plus

    www.k19.com.br/artigos/como-instalar-o-visual-studio-express-2013-para-windows-desktop

    www.k19.com.br/artigos/o-compilador-c-sharp-e-a-variavel-de-ambiente-path

    www.facebook.com/k19treinamentos 5

  • SUMRIO 6

    6 www.k19.com.br

  • INTRODUO

    CA

    P

    TU

    LO

    1Objetivo

    O objetivo fundamental dos treinamentos da K19 transmitir os conhecimentos necessrios paraque os seus alunos possam atuar no mercado de trabalho na rea de desenvolvimento de software.

    As plataformas .NET e Java so as mais utilizadas no desenvolvimento de software. Para utilizaros recursos oferecidos por essas plataformas de forma eficiente, necessrio possuir conhecimentoslido em orientao a objetos.

    Orientao a Objetos

    Um modelo de programao ou paradigma de programao um conjunto de princpios, ideias,conceitos e abstraes utilizado para o desenvolvimento de uma aplicao.

    KB 0-

    X8

    POKE

    T 801

    MADE

    BY

    K19

    AnalogiaPara entender melhor o que so os modelos de programao, podemos compar-loscom padres arquiteturais utilizados por diferentes povos para construo de casas. As

    caractersticas ambientais definem quais tcnicas devem ser adotadas para a construo dasmoradias. Analogamente, devemos escolher o modelo de programao mais adequado s ne-cessidades da aplicao que queremos desenvolver.

    CABANA DE NDIO IGLU CASA OCIDENTAL

    Figura 1.1: Moradias

    O modelo de programao mais adotado no desenvolvimento de sistemas corporativos o mo-delo orientado a objetos. Esse modelo utilizado com o intuito de obter alguns benefcios especfi-cos. Normalmente, o principal benefcio desejado facilitar a manuteno das aplicaes.

    www.facebook.com/k19treinamentos 7

  • INTRODUO 8

    Em geral, os conceitos do modelo de programao orientado a objetos diminuem a complexi-dade do desenvolvimento de sistemas que possuem as seguintes caractersticas:

    Sistemas com grande quantidade de funcionalidades desenvolvidos por uma equipe.

    Sistemas que sero utilizados por um longo perodo de tempo e sofrero alteraes constantes.

    Plataforma .NET

    A plataforma .NET ser objeto de estudo desse treinamento. Mas, devemos salientar que os con-ceitos de orientao a objetos que sero vistos podero ser aplicados tambm na plataforma Java.

    No primeiro momento, os dois elementos mais importantes da plataforma .NET so:

    A linguagem de programao C#.

    O ambiente de execuo .NET.

    A linguagem de programao C# permite que os conceitos de orientao a objetos sejam aplica-dos no desenvolvimento de uma aplicao.

    O ambiente de execuo .NET permite que uma aplicao .NET seja executada em diferentesverses do Sistema Operacional Windows.

    PLATAFORMA .NET

    LINGUAGEM DE PROGRAMAOORIENTADA A OBJETOS

    AMBIENTE DE EXECUO

    Figura 1.2: Plataforma .NET

    Plataforma .NET VS Orientao a Objetos

    Do ponto de vista do aprendizado, interessante tentar definir o que mais importante, a plata-forma .NET ou a orientao a objetos. Consideramos que a orientao a objetos mais importantepois ela aplicada em muitas outras linguagens.

    8 www.k19.com.br

  • LGICA

    CA

    P

    TU

    LO

    2O que um Programa?

    Um dos maiores benefcios da utilizao de computadores a automatizao de processos reali-zados manualmente por pessoas. Vejamos um exemplo prtico:

    Quando as apuraes dos votos das eleies no Brasil eram realizadas manualmente, o tempopara obter os resultados era alto e havia alta probabilidade de uma falha humana. Esse processo foiautomatizado e hoje realizado por computadores. O tempo para obter os resultados e a chance deocorrer uma falha humana diminuram drasticamente.

    Basicamente, os computadores so capazes de executar instrues matemticas mais rapida-mente do que o homem. Essa simples capacidade permite que eles resolvam problemas complexosde maneira mais eficiente. Porm, eles no possuem a inteligncia necessria para definir quaisinstrues devem ser executadas para resolver uma determinada tarefa. Por outro lado, os seres hu-mano possuem essa inteligncia. Dessa forma, uma pessoa precisa definir um roteiro com a sequn-cia de comandos necessrios para realizar uma determinada tarefa e depois passar para um compu-tador executar esse roteiro. Formalmente, esses roteiros so chamados de programas.

    Os programas devem ser colocados em arquivos no disco rgido dos computadores. Assim, quandoas tarefas precisam ser realizadas, os computadores podem ler esses arquivos para saber quais ins-trues devem ser executadas.

    Linguagem de Mquina

    Os computadores s sabem ler instrues escritas em linguagem de mquina. Uma instruoescrita em linguagem de mquina uma sequncia formada por 0s e 1s que representa a aoque um computador deve executar.

    000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000100000000000000000000111000011111101110100000111000000000101101000000100111001101001000011011100000000001010011001100110100100001010101000110100001101001011100110010000001110000011100100110111101100111011100100110000101101101001000000110001101100001011011100110111001101111011101000010000001100010011001010010000001110010011

    Figura 2.1: Cdigo de Mquina.

    Teoricamente, as pessoas poderiam escrever os programas diretamente em linguagem de m-quina. Na prtica, ningum faz isso pois uma tarefa muito complicada e demorada.

    www.facebook.com/k19treinamentos 9

  • LGICA 10

    Um arquivo contendo as instrues de um programa em Linguagem de Mquina chamado deexecutvel.

    Linguagem de Programao

    Como vimos anteriormente, escrever um programa em linguagem de mquina totalmente in-vivel para uma pessoa. Para resolver esse problema, surgiram as linguagens de programao, quetentam se aproximar das linguagens humanas. Confira um trecho de um cdigo escrito com a lin-guagem de programao C#:

    1 class OlaMundo2 {3 static void Main()4 {5 System.Console.WriteLine("Ol Mundo");6 }7 }

    Cdigo C# 2.1: OlaMundo.cs

    Por enquanto voc pode no entender muito do que est escrito, porm fica bem claro que umprograma escrito dessa forma fica bem mais fcil de ser lido.

    Um arquivo contendo as instrues de um programa em linguagem de programao chamadode arquivo fonte.

    Compilador

    Por um lado, os computadores processam apenas instrues em linguagem de mquina. Por ou-tro lado, as pessoas definem as instrues em linguagem de programao. Dessa forma, necessriotraduzir o cdigo escrito em linguagem de programao por uma pessoa para um cdigo em lingua-gem de mquina para que um computador possa processar. Essa traduo realizada por programasespeciais chamados compiladores.

    while(true){ if(x < 1){ return 0; }

    return 1;}

    while(true){ if(x < 1){ return 0; }

    return 1;}

    PROCESSADORCDIGO FONTE NO EXECUTA

    CDIGO FONTE COMPILADOR CDIGO DE MQUINA PROCESSADOR EXECUTA

    Figura 2.2: Processo de compilao e execuo de um programa.

    Mquinas Virtuais

    10 www.k19.com.br

  • 11 LGICA

    Assim como as pessoas podem se comunicar atravs de lnguas diferentes, os computadores po-dem se comunicar atravs de linguagens de mquina diferentes. A linguagem de mquina de umcomputador definida pela arquitetura do processador desse computador. H diversas arquitetu-ras diferentes (Intel, ARM, PowerPC, etc) e cada uma delas define uma linguagem de mquina dife-rente. Em outras palavras, um programa pode no executar em computadores com processadoresde arquiteturas diferentes.

    Os computadores so controlados por um sistema operacional que oferece diversas bibliotecasnecessrias para o desenvolvimento das aplicaes que podem ser executadas atravs dele. Sistemasoperacionais diferentes (Windows, Linux, Mac OS X, etc) possuem bibliotecas diferentes. Em outraspalavras, um programa pode no executar em computadores com sistemas operacionais diferentes.

    Portanto, para determinar se um cdigo em linguagem de mquina pode ou no ser executadapor um computador, devemos considerar a arquitetura do processador e o sistema operacional dessecomputador.

    Algumas bibliotecas especficas de sistema operacional so chamadas diretamente pelas instru-es em linguagem de programao. Dessa forma, geralmente, o cdigo fonte est amarrado a umaplataforma (sistema operacional + arquitetura de processador).

    PROGRAMA 1 PLATAFORMA 1 EXECUTA

    EXECUTAPROGRAMA 2 PLATAFORMA 2

    NO EXECUTAPROGRAMA 2 PLATAFORMA 3

    Figura 2.3: Ilustrao mostrando que cada plataforma necessita de um executvel especfico.

    Uma empresa que deseja ter a sua aplicao disponvel para diversos sistemas operacionais (Win-dows, Linux, Mac OS X, etc), e diversas arquiteturas de processador (Intel, ARM, PowerPC, etc), terque desenvolver verses diferentes do cdigo fonte para cada plataforma (sistema operacional + ar-quitetura de processador). Isso pode causar um impacto financeiro nessa empresa que inviabiliza onegcio.

    www.facebook.com/k19treinamentos 11

  • LGICA 12

    Para tentar resolver o problema do desenvolvimento de aplicaes multiplataforma, surgiu oconceito de mquina virtual.

    Uma mquina virtual funciona como uma camada a mais entre o cdigo compilado e a plata-forma. Quando compilamos um cdigo fonte, estamos criando um executvel que a mquina virtualsaber interpretar e ela quem dever traduzir as instrues do seu programa para a plataforma.

    MQUINA VIRTUAL 1 PLATAFORMA 1 EXECUTA

    MQUINA VIRTUAL 2 EXECUTAPROGRAMA PLATAFORMA 2

    MQUINA VIRTUAL 3 EXECUTAPLATAFORMA 3

    Figura 2.4: Ilustrao do funcionamento da mquina virtual.

    Tudo parece estar perfeito agora. Porm, olhando atentamente a figura acima, percebemos queexiste a necessidade de uma mquina virtual para cada plataforma. Algum poderia dizer que, defato, o problema no foi resolvido, apenas mudou de lugar.

    A diferena que implementar a mquina virtual no tarefa do programador que desenvolveas aplicaes que sero executadas nela. A implementao da mquina virtual responsabilidadede terceiros, que geralmente so empresas bem conceituadas ou projetos de cdigo aberto que en-volvem programadores do mundo inteiro. Como maiores exemplos podemos citar a Microsoft CLR(Common Language Runtime) e Mono CLR.

    Uma desvantagem em utilizar uma mquina virtual para executar um programa a diminuiode performance, j que a prpria mquina virtual consome recursos do computador. Alm disso, asinstrues do programa so processadas primeiro pela mquina virtual e depois pelo computador.

    Por outro lado, as mquinas virtuais podem aplicar otimizaes que aumentam a performanceda execuo de um programa. Inclusive, essas otimizaes podem considerar informaes geradasdurante a execuo. So exemplos de informaes geradas durante a execuo: a quantidade de usoda memria RAM e do processador do computador, a quantidade de acessos ao disco rgido, a quan-tidade de chamadas de rede e a frequncia de execuo de um determinado trecho do programa.

    Algumas mquinas virtuais identificam os trechos do programa que esto sendo mais chamadosem um determinado momento da execuo para traduzi-los para a linguagem de mquina do com-

    12 www.k19.com.br

  • 13 LGICA

    putador. A partir da, esses trechos podem ser executados diretamente no processador sem passarpela mquina virtual. Essa anlise da mquina virtual realizada durante toda a execuo.

    Com essas otimizaes que consideram vrias informaes geradas durante a execuo, um pro-grama executado com mquina virtual pode at ser mais eficiente em alguns casos do que um pro-grama executado diretamente no sistema operacional.

    Mais SobreGeralmente, as mquinas virtuais utilizam uma estratgia de compilao chamadaJust-in-time compilation (JIT). Nessa abordagem, o cdigo de mquina pode ser

    gerado diversas vezes durante o processamento de um programa com o intuito de melhorar autilizao dos recursos disponveis em um determinado instante da execuo.

    Exemplo de programa C#

    Vamos criar um simples programa para entendermos como funciona o processo de compilao eexecuo. Utilizaremos a linguagem C#, que amplamente adotada nas empresas. Observe o cdigodo exemplo de um programa escrito em C# que imprime uma mensagem na tela:

    1 class OlaMundo2 {3 static void Main()4 {5 System.Console.WriteLine("Ol Mundo");6 }7 }

    Cdigo C# 2.2: OlaMundo.cs

    O cdigo fonte C# deve ser colocado em arquivos com a extenso .cs. Agora, no necessrio en-tender todo o cdigo do exemplo. Basta saber que toda aplicao C# precisa ter um mtodo especialchamado Main para executar.

    O prximo passo compilar o cdigo fonte, para gerar um executvel que possa ser processadopela mquina virtual do .NET. O compilador padro da plataforma .NET (csc) pode ser utilizado paracompilar esse arquivo. O compilador pode ser executado pelo terminal.

    C:\Users\K19\Documents >csc OlaMundo.csMicrosoft (R) Visual C# 2010 Compiler version 4.0.30319.1Copyright (C) Microsoft Corporation. All rights reserved.

    Terminal 2.1: Compilando

    O cdigo gerado pelo compilador .NET armazenado em arquivos com a extenso .exe. Noexemplo, o programa gerado pelo compilador colocado em um arquivo chamado OlaMundo.exe eele pode ser executado atravs de um terminal.

    C:\Users\K19\Documents >OlaMundo.exeOl Mundo

    Terminal 2.2: Executando

    www.facebook.com/k19treinamentos 13

  • LGICA 14

    ImportantePara compilar e executar um programa escrito em C#, necessrio que voc tenha ins-talado e configurado em seu computador uma mquina virtual .NET. Verses mais re-

    centes do Windows j possuem uma mquina virtual .NET instalada.

    Mtodo Main - Ponto de Entrada

    Para um programa C# executar, necessrio definir um mtodo especial para ser o ponto deentrada do programa, ou seja, para ser o primeiro mtodo a ser chamado quando o programa forexecutado. O mtodo Main precisa ser static e seu tipo de retorno pode ser void ou int. Ele tambmpode declarar parmentros para receber os argumentos passados pela linha de comando e deve serinserido em uma classe C#.

    Algumas das possveis variaes da assinatura do mtodo Main:

    1 static void Main()2 static int Main()3 static void Main(string [] args)4 static int Main(string [] args)

    Cdigo C# 2.3: Variaes da Assinatura do Mtodo Main

    Os parmetros do mtodo Main so passados pela linha de comando e podem ser manipuladosdentro do programa. O cdigo abaixo imprime cada parmetro recebido em uma linha diferente.

    1 class Programa2 {3 static void Main(string [] args)4 {5 for(int i = 0; i < args.Length; i++)6 {7 System.Console.WriteLine(args[i]);8 }9 }10 }

    Cdigo C# 2.4: Imprimindo os parmetros da linha de comando

    Os parmetros devem ser passados imediatamente aps o nome do programa. A compilao eexecuo do programa mostrada na figura abaixo.

    C:\Users\K19\Documents >csc Programa.csMicrosoft (R) Visual C# 2010 Compiler version 4.0.30319.1Copyright (C) Microsoft Corporation. All rights reserved.

    C:\Users\K19\Documents >Programa.exe "Rafael Cosentino" "Marcelo Martins"Rafael CosentinoMarcelo Martins

    Terminal 2.3: Imprimindo os parmetros da linha de comando

    Exerccios de Fixao

    14 www.k19.com.br

  • 15 LGICA

    1 Abra um terminal e crie uma pasta com o seu nome. Voc deve salvar os seus exerccios nessapasta.

    C:\Users\K19\Documents >md Marcelo

    Terminal 2.4: Criando a pasta de exerccios

    2 Dentro da sua pasta de exerccios, crie uma pasta para os arquivos desenvolvidos nesse captulochamada logica.

    C:\Users\K19\Documents >cd Marcelo

    C:\ Users\K19\Documents\Marcelo >md logica

    Terminal 2.5: Criando a pasta dos exerccios desse captulo

    3 Crie um programa que imprima uma mensagem na tela. Adicione o seguinte arquivo na pastalogica.

    1 class OlaMundo2 {3 static void Main()4 {5 System.Console.WriteLine("Ol Mundo");6 }7 }

    Cdigo C# 2.5: OlaMundo.cs

    Compile e execute a classe OlaMundo.

    Variveis

    Basicamente, o que um programa faz manipular dados. Em geral, esses dados so armazenadosem variveis localizadas na memria RAM do computador. Uma varivel pode guardar dados devrios tipos: nmeros, textos, booleanos (verdadeiro ou falso), referncias de objetos. Alm disso,toda varivel possui um nome que utilizado quando a informao dentro da vriavel precisa sermanipulada pelo programa.

    numeroDaConta = 4823

    numeroDaConta

    MEMRIA RAM

    numeroDaConta

    4823

    MEMRIA RAM

    Figura 2.5: Processo de atribuio do valor numrico 4823 varivel numeroDaConta.

    Declarao

    Na linguagem de programao C#, as variveis devem ser declaradas para que possam ser uti-lizadas. A declarao de uma varivel envolve definir um nome nico (identificador) dentro de umescopo e um tipo de valor. As variveis so acessadas pelos nomes e armazenam valores compatveiscom o seu tipo.

    www.facebook.com/k19treinamentos 15

  • LGICA 16

    1 // Uma varivel do tipo int chamada numeroDaConta.2 int numeroDaConta;34 // Uma varivel do tipo double chamada precoDoProduto.5 double precoDoProduto;

    Cdigo C# 2.6: Declarao de Variveis

    Mais SobreUma linguagem de programao dita estaticamente tipada quando ela exige que ostipos das variveis sejam definidos antes da compilao. A linguagem C# uma lingua-

    gem estaticamente tipada.

    Uma linguagem de programao dita fortemente tipada quando ela exige que os valoresarmazenados em uma varivel sejam compatveis com o tipo da varivel. A linguagem C# umalinguagem fortemente tipada.

    Mais SobreEm geral, as linguagens de programao possuem convenes para definir os nomesdas variveis. Essas convenes ajudam o desenvolvimento de um cdigo mais legvel.

    Na conveno de nomes da linguagem C#, os nomes das variveis devem seguir o padro camelcase com a primeira letra minscula. Esse padro tambm conhecido como lower camelcase. Veja alguns exemplos:

    nomeDoCliente

    numeroDeAprovados

    A conveno de nomes da linguagem C# pode ser consultada na seguinte url: http://msdn.microsoft.com/en-us/library/ms229002.aspx

    A declarao de uma varivel pode ser realizada em qualquer linha de um bloco. No necessriodeclarar todas as variveis no comeo do bloco como acontece em algumas linguagens de progra-mao.

    1 // Declarao com Inicializao2 int numero = 10;34 // Uso da varivel5 System.Console.WriteLine(numero);67 // Outra Declarao com Inicializao8 double preco = 137.6;910 // Uso da varivel11 System.Console.WriteLine(preco);

    Cdigo C# 2.7: Declarando em qualquer linha de um bloco.

    16 www.k19.com.br

  • 17 LGICA

    No podemos declarar duas variveis com o mesmo nome em um nico bloco ou escopo poisocorrer um erro de compilao.

    1 // Declarao2 int numero = 10;34 // Erro de Compilao5 int numero = 10;

    Cdigo C# 2.8: Duas vriaveis com o mesmo nome no mesmo bloco.

    Inicializao

    Toda varivel deve ser inicializada antes de ser utilizada pela primeira vez. Se isso no for reali-zado, ocorrer um erro de compilao. A inicializao realizada atravs do operador de atribuio=. Esse operador guarda um valor em uma varivel.

    1 // Declaraes2 int numero;3 double preco;45 // Inicializao6 numero = 10;78 // Uso Correto9 System.Console.WriteLine(numero);1011 // Erro de compilao12 System.Console.WriteLine(preco);

    Cdigo C# 2.9: Inicializao

    Tipos Primitivos

    A linguagem C# define um conjunto de tipos bsicos de dados que so chamados tipos primiti-vos. A tabela abaixo mostra os oito tipos primitivos da linguagem C# e os valores compatveis.

    Tipo Descrio Tamanho (peso)sbyte Valor inteiro entre -128 e 127 (inclusivo) 1 bytebyte Valor inteiro entre 0 e 255 (inclusivo) 1 byteshort Valor inteiro entre -32.768 e 32.767 (inclusivo) 2 bytes

    ushort Valor inteiro entre 0 e 65.535 (inclusivo) 2 bytes

    intValor inteiro entre -2.147.483.648 e 2.147.483.647 (inclu-sivo)

    4 bytes

    uint Valor inteiro entre 0 e 4.294.967.295 (inclusivo) 4 bytes

    longValor inteiro entre -9.223.372.036.854.775.808 e9.223.372.036.854.775.807 (inclusivo)

    8 bytes

    ulongValor inteiro entre 0 e 18.446.744.073.709.551.615 (inclu-sivo)

    8 bytes

    floatValor com ponto flutuante entre 1,401298464324817071045 e 3,40282346638528860 1038 (positivo ou nega-tivo)

    4 bytes

    doubleValor com ponto flutuante entre 4,9406564584124654410324 e 1,7976931348623157010308 (positivo ou nega-tivo)

    8 bytes

    www.facebook.com/k19treinamentos 17

  • LGICA 18

    Tipo Descrio Tamanho (peso)

    decimalValor com ponto flutuante entre 1,01028 e 7,91028(positivo ou negativo)

    16 bytes

    bool true ou false 1 bit

    charUm nico caractere Unicode de 16 bits. Valor inteiro epositivo entre 0 (ou \u0000) e 65.535 (ou \uffff)

    2 bytes

    Tabela 2.1: Tipos primitivos de dados em C#.

    ImportanteNenhum tipo primitivo da linguagem C# permite o armazenamento de texto. O tipoprimitivo char armazena apenas um caractere. Quando necessrio armazenar um

    texto, devemos utilizar o tipo string. Contudo, importante salientar que o tipo string no um tipo primitivo.

    Operadores

    Para manipular os valores das variveis de um programa, devemos utilizar os operadores ofe-recidos pela linguagem de programao adotada. A linguagem C# possui diversos operadores e osprincipais so categorizados da seguinte forma:

    Aritmtico (+, -, *, /, %)

    Atribuio (=, +=, -=, *=, /=, %=)

    Relacional (==, !=, =)

    Lgico (&&, ||)

    Aritmtico

    Os operadores aritmticos funcionam de forma muito semelhante aos operadores na matem-tica. Os operadores aritmticos so:

    Soma +

    Subtrao -

    Multiplicao *

    Diviso /

    Mdulo %

    1 int umMaisUm = 1 + 1; // umMaisUm = 22 int tresVezesDois = 3 * 2; // tresVezesDois = 63 int quatroDivididoPor2 = 4 / 2; // quatroDivididoPor2 = 24 int seisModuloCinco = 6 % 5; // seisModuloCinco = 15 int x = 7;6 x = x + 1 * 2; // x = 97 x = x - 3; // x = 68 x = x / (6 - 2 + (3*5) /(16 -1)); // x = 2

    Cdigo C# 2.10: Exemplo de uso dos operadores aritmticos.

    18 www.k19.com.br

  • 19 LGICA

    ImportanteO mdulo de um nmero x, na matemtica, o valor numrico de x desconsiderandoo seu sinal (valor absoluto). Na matemtica expressamos o mdulo da seguinte forma:

    |2| = 2.Em linguagens de programao, o mdulo de um nmero o resto da diviso desse nmero poroutro. No exemplo acima, o resto da diviso de 6 por 5 igual a 1. Alm disso, lemos a expresso6%5 da seguinte forma: seis mdulo cinco.

    ImportanteAs operaes aritmticas em C# obedecem as mesmas regras da matemtica com rela-o precedncia dos operadores e parnteses. Portanto, as operaes so resolvidas a

    partir dos parnteses mais internos at os mais externos, primeiro resolvemos as multiplicaes,divises e os mdulos. Em seguida, resolvemos as adies e subtraes.

    Atribuio

    Nas sees anteriores, j vimos um dos operadores de atribuio, o operador = (igual). Os opera-dores de atribuio so:

    Simples =

    Incremental +=

    Decremental -=

    Multiplicativa *=

    Divisria /=

    Modular %=

    1 int valor = 1; // valor = 12 valor += 2; // valor = 33 valor -= 1; // valor = 24 valor *= 6; // valor = 125 valor /= 3; // valor = 46 valor %= 3; // valor = 1

    Cdigo C# 2.11: Exemplo de uso dos operadores de atribuio.

    As instrues acima poderiam ser escritas de outra forma:

    1 int valor = 1; // valor = 12 valor = valor + 2; // valor = 33 valor = valor - 1; // valor = 24 valor = valor * 6; // valor = 125 valor = valor / 3; // valor = 46 valor = valor % 3; // valor = 1

    Cdigo C# 2.12: O mesmo exemplo anterior, usando os operadores aritmticos.

    Como podemos observar, os operadores de atribuio, com exceo do simples (=), reduzem aquantidade de cdigo escrito. Podemos dizer que esses operadores funcionam como atalhos paraas operaes que utilizam os operadores aritmticos.

    www.facebook.com/k19treinamentos 19

  • LGICA 20

    Relacional

    Muitas vezes precisamos determinar a relao entre uma varivel ou valor e outra varivel ouvalor. Nessas situaes, utilizamos os operadores relacionais. As operaes realizadas com os opera-dores relacionais devolvem valores do tipo primitivo bool. Os operadores relacionais so:

    Igualdade ==

    Diferena !=

    Menor =

    1 int valor = 2;2 bool t = false;3 t = (valor == 2); // t = true4 t = (valor != 2); // t = false5 t = (valor < 2); // t = false6 t = (valor 1); // t = true8 t = (valor >= 1); // t = true

    Cdigo C# 2.13: Exemplo de uso dos operadores relacionais em C#.

    Lgico

    A linguagem C# permite verificar duas ou mais condies atravs de operadores lgicos. Os ope-radores lgicos devolvem valores do tipo primitivo bool. Os operadores lgicos so:

    E lgico &&

    OU lgico ||

    1 int valor = 30;2 bool teste = false;3 teste = valor < 40 && valor > 20; // teste = true4 teste = valor < 40 && valor > 30; // teste = false5 teste = valor > 30 || valor > 20; // teste = true6 teste = valor > 30 || valor < 20; // teste = false7 teste = valor < 50 && valor == 30; // teste = true

    Cdigo C# 2.14: Exemplo de uso dos operadores lgicos em C#.

    IF-ELSE

    O comportamento de uma aplicao pode ser influenciado por valores definidos pelos usurios.Por exemplo, considere um sistema de cadastro de produtos. Se um usurio tenta adicionar umproduto com preo negativo, a aplicao no deve cadastrar esse produto. Caso contrrio, se o preono for negativo, o cadastro pode ser realizado normalmente.

    Outro exemplo, quando o pagamento de um boleto realizado em uma agncia bancria, o sis-tema do banco deve verificar a data de vencimento do boleto para aplicar ou no uma multa poratraso.

    20 www.k19.com.br

  • 21 LGICA

    Para verificar uma determinada condio e decidir qual bloco de instrues deve ser executado,devemos aplicar o comando if.

    1 if (preco < 0)2 {3 System.Console.WriteLine("O preo do produto no pode ser negativo");4 }5 else6 {7 System.Console.WriteLine("Produto cadastrado com sucesso");8 }

    Cdigo C# 2.15: Comando if

    O comando if permite que valores booleanos sejam testados. Se o valor passado como par-metro para o comando if for true, o bloco do if executado. Caso contrrio, o bloco do else executado.

    O parmetro passado para o comando if deve ser um valor booleano, caso contrrio o cdigono compila. O comando else e o seu bloco so opcionais.

    WHILE

    Em alguns casos, necessrio repetir um trecho de cdigo diversas vezes. Suponha que sejanecessrio imprimir 10 vezes na tela a mensagem: Bom Dia. Isso poderia ser realizado colocando10 linhas iguais a essa no cdigo fonte:

    1 System.Console.WriteLine("Bom Dia");

    Cdigo C# 2.16: Bom Dia

    Se ao invs de 10 vezes fosse necessrio imprimir 100 vezes, j seriam 100 linhas iguais no cdigofonte. muito trabalhoso utilizar essa abordagem para esse problema.

    Atravs do comando while, possvel definir quantas vezes um determinado trecho de cdigodeve ser executado pelo computador.

    1 int contador = 0;23 while(contador < 100)4 {5 System.Console.WriteLine("Bom Dia");6 contador ++;7 }

    Cdigo C# 2.17: Comando while

    A varivel contador indica o nmero de vezes que a mensagem Bom Dia foi impressa na tela.O operador ++ incrementa a varivel contador a cada rodada.

    O parmetro do comando while tem que ser um valor booleano. Caso contrrio, ocorrer umerro de compilao.

    FOR

    www.facebook.com/k19treinamentos 21

  • LGICA 22

    O comando for anlogo ao while. A diferena entre esses dois comandos que o for recebetrs argumentos.

    1 for(int contador = 0; contador < 100; contador ++) {2 System.Console.WriteLine("Bom Dia");3 }

    Cdigo C# 2.18: Comando for

    Exerccios de Fixao

    4 Imprima na tela o seu nome 100 vezes. Adicione na pasta logica o seguinte arquivo.

    1 class ImprimeNome2 {3 static void Main()4 {5 for(int contador = 0; contador < 100; contador ++)6 {7 System.Console.WriteLine("Marcelo Martins");8 }9 }10 }

    Cdigo C# 2.19: ImprimeNome.cs

    Compile e execute a classe ImprimeNome.

    C:\Users\K19\Marcelo\logica >csc ImprimeNome.csMicrosoft (R) Visual C# 2010 Compiler version 4.0.30319.1Copyright (C) Microsoft Corporation. All rights reserved.

    C:\Users\K19\Marcelo\logica >ImprimeNome.exeMarcelo MartinsMarcelo MartinsMarcelo Martins ...

    Terminal 2.6: Imprimindo 100 vezes um nome

    5 Imprima na tela os nmeros de 1 at 100. Adicione na pasta logica o seguinte arquivo.

    1 class ImprimeAte1002 {3 static void Main()4 {5 for(int contador = 1; contador

  • 23 LGICA

    C:\Users\K19\Documents\Marcelo\logica >csc ImprimeAte100.csMicrosoft (R) Visual C# 2010 Compiler version 4.0.30319.1Copyright (C) Microsoft Corporation. All rights reserved.

    C:\Users\K19\Documents\Marcelo\logica >ImprimeAte100.exe12...

    Terminal 2.7: Imprimindo de 1 at 100

    6 Faa um programa que percorra todos os nmero de 1 at 100. Para os nmeros mpares, deveser impresso um *, e para os nmeros pares, deve ser impresso dois **. Veja o exemplo abaixo:

    *********

    Adicione o seguinte arquivo na pasta logica.

    1 class ImprimePadrao12 {3 static void Main()4 {5 for(int contador = 1; contador csc ImprimePadrao1.csMicrosoft (R) Visual C# 2010 Compiler version 4.0.30319.1Copyright (C) Microsoft Corporation. All rights reserved.

    C:\Users\K19\Documents\Marcelo\logica >ImprimePadrao1.exe******...

    Terminal 2.8: Padro 1

    7 Faa um programa que percorra todos os nmero de 1 at 100. Para os nmeros mltiplos de 4,imprima a palavra PI, e para os outros, imprima o prprio nmero. Veja o exemplo abaixo:

    www.facebook.com/k19treinamentos 23

  • LGICA 24

    123PI567PI

    Adicione o seguinte arquivo na pasta logica.

    1 class ImprimePadrao22 {3 static void Main()4 {5 for(int contador = 1; contador csc ImprimePadrao2.csMicrosoft (R) Visual C# 2010 Compiler version 4.0.30319.1Copyright (C) Microsoft Corporation. All rights reserved.

    C:\Users\K19\Documents\Marcelo\logica >ImprimePadrao2.exe123PI567PI...

    Terminal 2.9: Padro 2

    Exerccios Complementares

    1 Crie um programa que imprima na tela um tringulo de *. Veja o exemplo abaixo:

    ******

    24 www.k19.com.br

  • 25 LGICA

    *********

    2 Crie um programa que imprima na tela vrios tringulos de *. Observe o padro abaixo.

    ********************

    3 Os nmeros de Fibonacci so uma sequncia de nmeros definida recursivamente. O primeiroelemento da sequncia 0 e o segundo 1. Os outros elementos so calculados somando os doisantecessores.

    0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233...

    Crie um programa para imprimir os 30 primeiros nmeros da sequncia de Fibonacci.

    4 Use seus conhecimentos para criar um programa que mostre um menu de atalho para os 5padres que acabamos de fazer. Exemplo:

    K1C:\Users\K19\Documents\Marcelo\logica >csc GeradorDePadroes.csMicrosoft (R) Visual C# 2010 Compiler version 4.0.30319.1Copyright (C) Microsoft Corporation. All rights reserved.

    C:\Users\K19\Documents\Marcelo\logica >GeradorDePadroes.exe

    Gerador de Padres

    Escolha a opo desejada:

    1- Padro

    2- Padro

    3- Padro

    4- Padro

    5- Padro

    0- Sair

    Terminal 2.13: Menu

    Se digitar o numero 1, ele automaticamente tem de executar o cdigo para o padro 1, e assimsucessivamente.

    Abaixo est o esqueleto da sua classe:

    www.facebook.com/k19treinamentos 25

  • LGICA 26

    1 // Vamos aprender nos proximos capitulos para que serve o using.2 using System;3 using System.IO;45 class GeradorDePadroes6 {7 static void Main()8 {9 int opc = 1;//Temos que atribuir o valor 1 na varivel , para poder entrar no -

    lao de repetio10 while (opc != 0)11 {12 // Coloque o codigo do menu aqui.1314 // Vamos aprender mais pra frente que esses so os comandos para receber e -

    guardar algum valor da tela.1516 TextReader textReader = Console.In;17 string valorTela = textReader.ReadLine ();18 opc = Convert.ToInt32(valorTela);1920 if (opc == 1)21 {22 // Cdigo para o Padro 123 }24 else if (opc == 2)25 {26 // Cdigo para o Padro 227 }28 else if (opc == 3)29 {30 // Cdigo para o Padro 331 }32 else if (opc == 4)33 {34 // Cdigo para o Padro 435 }36 else if (opc == 5)37 {38 // Cdigo para o Padro 539 }40 }41 }42 }

    Cdigo C# 2.26: GeradorDePadroes.cs

    26 www.k19.com.br

  • ORIENTAO A OBJETOS

    CA

    P

    TU

    LO

    3Domnio e Aplicao

    Um domnio composto pelas entidades, informaes e processos relacionados a um determi-nado contexto. Uma aplicao pode ser desenvolvida para automatizar ou tornar factvel as tarefasde um domnio. Portanto, uma aplicao basicamente o reflexo de um domnio.

    Para exemplificar, suponha que estamos interessados em desenvolver uma aplicao para facili-tar as tarefas do cotidiano de um banco. Podemos identificar clientes, funcionrios, agncias e con-tas como entidades desse domnio. Assim como podemos identificar as informaes e os processosrelacionados a essas entidades.

    DOMNIO BANCRIO

    CONTA DAMARIA

    CONTA DOJOS

    CONTA DOJOO

    FUNCIONRIOJONAS

    FUNCIONRIOMARCELO

    FUNCIONRIORAFAEL

    CLIENTEMARIA

    CLIENTEJOS

    CLIENTEJOO

    Figura 3.1: Domnio bancrio

    www.facebook.com/k19treinamentos 27

  • ORIENTAO A OBJETOS 28

    Mais SobreA identificao dos elementos de um domnio uma tarefa difcil, pois depende forte-mente do conhecimento das entidades, informaes e processos que o compem. Em

    geral, as pessoas que possuem esse conhecimento ou parte dele esto em contato constante como domnio e no possuem conhecimentos tcnicos para desenvolver uma aplicao.

    Desenvolvedores de software buscam constantemente mecanismos para tornar mais eficiente oentendimento dos domnios para os quais eles devem desenvolver aplicaes.

    Objetos, Atributos e Mtodos

    As entidades identificadas no domnio devem ser representadas de alguma forma dentro da apli-cao correspondente. Nas aplicaes orientadas a objetos, as entidades so representadas por ob-jetos.

    Uma aplicao orientada a objetos composta por objetos.

    Em geral, um objeto representa uma entidade do domnio.

    Para exemplificar, suponha que no domnio de um determinado banco exista um cliente cha-mado Joo. Dentro de uma aplicao orientada a objetos correspondente a esse domnio, deve existirum objeto para representar esse cliente.

    Suponha que algumas informaes do cliente Joo como nome, data de nascimento e sexo soimportantes para o banco. J que esses dados so relevantes para o domnio, o objeto que representaesse cliente deve possuir essas informaes. Esses dados so armazenados nos atributos do objetoque representa o Joo.

    Um atributo uma varivel que pertence a um objeto.

    Os dados de um objeto so armazenados nos seus atributos.

    O prprio objeto deve realizar operaes de consulta ou alterao dos valores de seus atributos.Essas operaes so definidas nos mtodos do objeto.

    Os mtodos tambm so utilizados para possibilitar interaes entre os objetos de uma aplica-o. Por exemplo, quando um cliente requisita um saque atravs de um caixa eletrnico do banco,o objeto que representa o caixa eletrnico deve interagir com o objeto que representa a conta docliente.

    As tarefas que um objeto pode realizar so definidas pelos seus mtodos.

    Um objeto composto por atributos e mtodos.

    28 www.k19.com.br

  • 29 ORIENTAO A OBJETOS

    APLICAODOMNIO BANCRIO

    CONTA DAMARIA

    CONTA DOJOS

    CONTA DOJOO

    FUNCIONRIOJONAS

    FUNCIONRIOMARCELO

    FUNCIONRIORAFAEL

    CLIENTEMARIA

    CLIENTEJOS

    CLIENTEJOO

    Funcionario

    nome = Rafael Cosentinocodigo = 1salario = 1000

    TiraFeriasAumentaSalarioMudaHorario

    Funcionario

    nome = Marcelo Rezendecodigo = 2salario = 2000

    TiraFeriasAumentaSalarioMudaHorario

    Funcionario

    nome = Jonas Hiratacodigo = 3salario = 3000

    TiraFeriasAumentaSalarioMudaHorario

    Conta

    saldo = 2000numero = 1

    DepositaSacaGeraExtrato

    Conta

    saldo = 4000numero = 2

    DepositaSacaGeraExtrato

    Conta

    saldo = 8000numero = 3

    DepositaSacaGeraExtrato

    Cliente

    nome = Joo do Pulocodigo = 1

    MudaEnderecoFazEmprestimo

    Cliente

    nome = Jos do Caixocodigo = 2

    MudaEnderecoFazEmprestimo

    Cliente

    nome = Maria do Bairrocodigo = 3

    MudaEnderecoFazEmprestimo

    Figura 3.2: Mapeamento Domnio-Aplicao

    www.facebook.com/k19treinamentos 29

  • ORIENTAO A OBJETOS 30

    Mais SobreEm geral, no adequado utilizar o objeto que representa um determinado clientepara representar outro cliente do banco, pois os dados dos clientes podem ser dife-

    rentes. Dessa forma, para cada cliente do banco, deve existir um objeto dentro do sistema pararepresent-lo.

    Mais SobreOs objetos no representam apenas coisas concretas como os clientes do banco. Elestambm devem ser utilizados para representar coisas abstratas como uma conta de um

    cliente ou um servio que o banco oferea.

    Classes

    Antes de um objeto ser criado, devemos definir quais sero os seus atributos e mtodos. Essadefinio realizada atravs de uma classe elaborada por um programador. A partir de uma classe,podemos construir objetos na memria do computador que executa a nossa aplicao.

    Podemos representar uma classe atravs de diagramas UML. O diagrama UML de uma classe composto pelo nome da mesma e pelos atributos e mtodos que ela define. Todos os objetos criadosa partir da classe Conta tero os atributos e mtodos mostrados no diagrama UML. Os valores dosatributos de dois objetos criados a partir da classe Conta podem ser diferentes.

    Figura 3.3: Diagrama UML da classe Conta.

    KB 0-

    X8

    POKE

    T 801

    MADE

    BY

    K19

    AnalogiaUm objeto como se fosse uma casa ou um prdio. Para ser construdo, precisa de umespao fsico. No caso dos objetos, esse espao fsico algum trecho vago da memria

    do computador que executa a aplicao. No caso das casas e dos prdios, o espao fsico algumterreno vazio.

    Um prdio construdo a partir de uma planta criada por um engenheiro ou arquiteto. Paracriar um objeto, necessrio algo semelhante a uma planta para que sejam desenhados osatributos e mtodos que o objeto deve ter. Em orientao a objetos, a planta de um objeto oque chamamos de classe.

    30 www.k19.com.br

  • 31 ORIENTAO A OBJETOS

    Uma classe funciona como uma receita para criar objetos. Inclusive, vrios objetos podem sercriados a partir de uma nica classe. Assim como vrias casas ou prdios poderiam ser constru-dos a partir de uma nica planta; ou vrios bolos poderiam ser preparados a partir de uma nicareceita; ou vrios carros poderiam ser construdos a partir de um nico projeto.

    Figura 3.4: Diversas casas construdas a partir da mesma planta

    Figura 3.5: Diversos bolos preparados a partir da mesma receita

    Figura 3.6: Diversos carros construdos a partir do mesmo projeto

    Basicamente, as diferenas entre dois objetos criados a partir da classe Conta so os valores dosseus atributos. Assim como duas casas construdas a partir da mesma planta podem possuircaractersticas diferentes. Por exemplo, a cor das paredes.

    Figura 3.7: Diversas casas com caractersticas diferentes

    www.facebook.com/k19treinamentos 31

  • ORIENTAO A OBJETOS 32

    Classes em C#

    O conceito de classe apresentado anteriormente genrico e pode ser aplicado em diversas lin-guagens de programao. Mostraremos como a classe Conta poderia ser escrita utilizando a lin-guagem C#. Inicialmente, discutiremos apenas sobre os atributos. Os mtodos sero abordadosposteriormente.

    1 class Conta2 {3 public double saldo;4 public double limite;5 public int numero;6 }

    Cdigo C# 3.1: Conta.cs

    A classe C# Conta declarada utilizando a palavra reservada class. No corpo dessa classe, sodeclaradas trs variveis que so os atributos que os objetos possuiro. Como a linguagem C# estaticamente tipada, os tipos dos atributos so definidos no cdigo. Os atributos saldo e limiteso do tipo double, que permite armazenar nmeros com casas decimais, e o atributo numero dotipo int, que permite armazenar nmeros inteiros. O modificador public adicionado em cadaatributo para que eles possam ser acessados a partir de qualquer ponto do cdigo. Discutiremossobre esse e outros modificadores de visibilidade em captulos posteriores.

    ImportantePor conveno, os nomes das classes na linguagem C# devem seguir o padro pascalcase tambm conhecido como upper camel case.

    Criando objetos em C#

    Aps definir a classe Conta, podemos criar objetos a partir dela. Esses objetos devem ser alocadosna memria RAM do computador. Felizmente, todo o processo de alocao do objeto na memria gerenciado pela mquina virtual. O gerenciamento da memria um dos recursos mais importantesoferecidos pela mquina virtual.

    Do ponto de vista da aplicao, basta utilizar um comando especial para criar objetos e a m-quina virtual se encarrega do resto. O comando para criar objetos o new.

    1 class TestaConta2 {3 static void Main()4 {5 new Conta();6 }7 }

    Cdigo C# 3.2: TestaConta.cs

    A linha com o comando new poderia ser repetida cada vez que desejssemos criar (instanciar)um objeto da classe Conta. A classe TestaConta serve apenas para colocarmos o mtodo Main, que o ponto de partida da aplicao.

    1 class TestaConta2 {

    32 www.k19.com.br

  • 33 ORIENTAO A OBJETOS

    3 static void Main()4 {5 // criando trs objetos6 new Conta();7 new Conta();8 new Conta();9 }10 }

    Cdigo C# 3.3: TestaConta.cs

    KB 0-

    X8

    POKE

    T 801

    MADE

    BY

    K19

    AnalogiaChamar o comando new passando uma classe C# como se estivssemos contratandouma construtora passando a planta da casa que queremos construir. A construtora se

    encarrega de construir a casa para ns de acordo com a planta. Assim como a mquina virtualse encarrega de construir o objeto na memria do computador.

    PROGRAMADOR PEDREIRO

    PLANTA

    CASA

    Figura 3.8: Construindo casas

    Referncias

    Todo objeto possui uma referncia. A referncia de um objeto a nica maneira de acessar osseus atributos e mtodos. Dessa forma, devemos guardar as referncias dos objetos que desejamosutilizar.

    KB 0-

    X8

    POKE

    T 801

    MADE

    BY

    K19

    AnalogiaA princpio, podemos comparar a referncia de um objeto com o endereo de memriadesse objeto. De fato, essa comparao simplifica o aprendizado. Contudo, o conceito

    de referncia mais amplo. Uma referncia o elemento que permite que um determinadoobjeto seja acessado.

    Uma referncia est para um objeto assim como um controle remoto est para um aparelho deTV. Atravs do controle remoto de uma TV voc pode aumentar o volume ou trocar de canal.

    www.facebook.com/k19treinamentos 33

  • ORIENTAO A OBJETOS 34

    Analogamente, podemos controlar um objeto atravs da referncia do mesmo.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    -/--

    0

    CH

    Figura 3.9: Controle remoto

    Referncias em C#

    Ao utilizar o comando new, um objeto alocado em algum lugar da memria. Para que possamosacessar esse objeto, precisamos de sua referncia. O comando new devolve a referncia do objeto quefoi criado.

    Para guardar as referncias devolvidas pelo comando new, devemos utilizar variveis no primi-tivas.

    1 Conta referecia = new Conta();

    Cdigo C# 3.4: Criando um objeto e guardando a referncia.

    No cdigo C# acima, a varivel referencia receber a referncia do objeto criado pelo comandonew. Essa varivel do tipo Conta. Isso significa que ela s pode armazenar referncias de objetos dotipo Conta.

    Manipulando Atributos

    Podemos alterar ou acessar os valores guardados nos atributos de um objeto se tivermos a refe-rncia a esse objeto. Os atributos so acessados pelo nome. No caso especfico da linguagem C#, asintaxe para acessar um atributo utiliza o operador ".".

    1 Conta referecia = new Conta();23 referecia.saldo = 1000.0;4 referecia.limite = 500.0;5 referecia.numero = 1;67 System.Console.WriteLine(referecia.saldo);8 System.Console.WriteLine(referecia.limite);9 System.Console.WriteLine(referecia.numero);

    Cdigo C# 3.5: Alterando e acessando os atributos de um objeto.

    No cdigo acima, o atributo saldo recebe o valor 1000.0. O atributo limite recebe o valor500 e o numero recebe o valor 1. Depois, os valores so impressos na tela atravs do comando

    34 www.k19.com.br

  • 35 ORIENTAO A OBJETOS

    System.Console.WriteLine.

    Valores Padro

    Poderamos instanciar um objeto e utilizar seus atributos sem inicializ-los explicitamente, poisos atributos so inicializados com valores padro. Os atributos de tipos numricos so inicializadoscom 0, os atributos do tipo boolean so inicializados com false e os demais atributos com null(referncia vazia).

    1 class Conta2 {3 public double limite;4 }

    Cdigo C# 3.6: Conta.cs

    1 class TestaConta2 {3 static void Main()4 {5 Conta conta = new Conta();67 // imprime 08 System.Console.WriteLine(conta.limite);9 }10 }

    Cdigo C# 3.7: TestaConta.cs

    A inicializao dos atributos com os valores padro ocorre na instanciao, ou seja, quando ocomando new utilizado. Dessa forma, todo objeto nasce com os valores padro. Em alguns casos, necessrio trocar esses valores. Para trocar o valor padro de um atributo, devemos inicializ-lo nadeclarao. Por exemplo, suponha que o limite padro das contas de um banco seja R$ 500. Nessecaso, seria interessante definir esse valor como padro para o atributo limite.

    1 class Conta2 {3 public double limite = 500;4 }

    Cdigo C# 3.8: Conta.cs

    1 class TestaConta2 {3 static void Main()4 {5 Conta conta = new Conta();67 // imprime 5008 System.Console.WriteLine(conta.limite);9 }10 }

    Cdigo C# 3.9: TestaConta.cs

    Exerccios de Fixao

    www.facebook.com/k19treinamentos 35

  • ORIENTAO A OBJETOS 36

    1 Dentro da sua pasta de exerccios, crie uma pasta chamada orientacao-a-objetos para os arqui-vos desenvolvidos neste captulo.

    C:\Users\K19\Marcelo >md orientacao -a-objetos

    Terminal 3.1: Criando a pasta dos exerccios desse captulo

    2 Implemente uma classe para definir os objetos que representaro os clientes de um banco. Essaclasse deve declarar dois atributos: um para os nomes e outro para os cdigos dos clientes. Adicioneo seguinte arquivo na pasta orientacao-a-objetos.

    1 class Cliente2 {3 public string nome;4 public int codigo;5 }

    Cdigo C# 3.10: Cliente.cs

    3 Faa um teste criando dois objetos da classe Cliente. Adicione o seguinte arquivo na pastaorientacao-a-objetos.

    1 class TestaCliente2 {3 static void Main()4 {5 Cliente c1 = new Cliente ();6 c1.nome = "Rafael Cosentino";7 c1.codigo = 1;89 Cliente c2 = new Cliente ();10 c2.nome = "Jonas Hirata";11 c2.codigo = 2;1213 System.Console.WriteLine(c1.nome);14 System.Console.WriteLine(c1.codigo);1516 System.Console.WriteLine(c2.nome);17 System.Console.WriteLine(c2.codigo);18 }19 }

    Cdigo C# 3.11: TestaCliente.cs

    Compile e execute a classe TestaCliente.

    4 Os bancos oferecem aos clientes a possibilidade de obter um carto de crdito que pode serutilizados para fazer compras. Um carto de crdito possui um nmero e uma data de validade. Crieuma classe para modelar os objetos que representaro os cartes de crdito. Adicione o seguintearquivo na pasta orientacao-a-objetos.

    1 class CartaoDeCredito2 {3 public int numero;

    36 www.k19.com.br

  • 37 ORIENTAO A OBJETOS

    4 public string dataDeValidade;5 }

    Cdigo C# 3.12: CartaoDeCredito.cs

    5 Faa um teste criando dois objetos da classe CartaoDeCredito. Altere e imprima os atributosdesses objetos. Adicione o seguinte arquivo na pasta orientacao-a-objetos.

    1 class TestaCartaoDeCredito2 {3 static void Main()4 {5 CartaoDeCredito cdc1 = new CartaoDeCredito ();6 cdc1.numero = 111111;7 cdc1.dataDeValidade = "01/01/2013";89 CartaoDeCredito cdc2 = new CartaoDeCredito ();10 cdc2.numero = 222222;11 cdc2.dataDeValidade = "01/01/2014";1213 System.Console.WriteLine(cdc1.numero);14 System.Console.WriteLine(cdc1.dataDeValidade);1516 System.Console.WriteLine(cdc2.numero);17 System.Console.WriteLine(cdc2.dataDeValidade);18 }19 }

    Cdigo C# 3.13: TestaCartaoDeCredito.cs

    Compile e execute a classe TestaCartaoDeCredito.

    6 As agncias do banco possuem nmero. Crie uma classe para definir os objetos que representa-ro as agncias.

    1 class Agencia2 {3 public int numero;4 }

    Cdigo C# 3.14: Agencia.cs

    7 Faa um teste criando dois objetos da classe Agencia. Altere e imprima os atributos dessesobjetos. Adicione o seguinte arquivo na pasta orientacao-a-objetos.

    1 class TestaAgencia2 {3 static void Main()4 {5 Agencia a1 = new Agencia ();6 a1.numero = 1234;78 Agencia a2 = new Agencia ();9 a2.numero = 5678;1011 System.Console.WriteLine(a1.numero);1213 System.Console.WriteLine(a2.numero);14 }

    www.facebook.com/k19treinamentos 37

  • ORIENTAO A OBJETOS 38

    15 }

    Cdigo C# 3.15: TestaAgencia.cs

    Compile e execute a classe TestaAgencia.

    8 As contas do banco possuem nmero, saldo e limite. Crie uma classe para definir os objetos querepresentaro as contas.

    1 class Conta2 {3 public int numero;4 public double saldo;5 public double limite;6 }

    Cdigo C# 3.16: Conta.cs

    9 Faa um teste criando dois objetos da classe Conta. Altere e imprima os atributos desses objetos.Adicione o seguinte arquivo na pasta orientacao-a-objetos.

    1 class TestaConta2 {3 static void Main()4 {5 Conta c1 = new Conta();6 c1.numero = 1234;7 c1.saldo = 1000;8 c1.limite = 500;910 Conta c2 = new Conta();11 c2.numero = 5678;12 c2.saldo = 2000;13 c2.limite = 250;1415 System.Console.WriteLine(c1.numero);16 System.Console.WriteLine(c1.saldo);17 System.Console.WriteLine(c1.limite);1819 System.Console.WriteLine(c2.numero);20 System.Console.WriteLine(c2.saldo);21 System.Console.WriteLine(c2.limite);22 }23 }

    Cdigo C# 3.17: TestaConta.cs

    Compile e execute a classe TestaConta.

    10 Faa um teste que imprima os atributos de um objeto da classe Conta logo aps a sua criao.

    1 class TestaValoresPadrao2 {3 static void Main()4 {5 Conta c = new Conta();67 System.Console.WriteLine(c.numero);8 System.Console.WriteLine(c.saldo);

    38 www.k19.com.br

  • 39 ORIENTAO A OBJETOS

    9 System.Console.WriteLine(c.limite);10 }11 }

    Cdigo C# 3.18: TestaValoresPadrao.cs

    Compile e execute a classe TestaValoresPadrao.

    11 Altere a classe Conta para que todos os objetos criados a partir dessa classe possuam R$ 100 delimite inicial.

    1 class Conta2 {3 public int numero;4 public double saldo;56 // Adicione a linha abaixo7 public double limite = 100;8 }

    Cdigo C# 3.19: Conta.cs

    Compile e execute a classe TestaValoresPadrao.

    Exerccios Complementares

    1 Implemente uma classe chamada Aluno na pasta orientacao-a-objetos para definir os objetosque representaro os alunos de uma escola. Essa classe deve declarar trs atributos: o primeiro parao nome, o segundo para o RG e o terceiro para a data de nascimento dos alunos.

    2 Faa uma classe chamada TestaAluno e crie dois objetos da classe Aluno atribuindo valores aeles. A classe tambm deve mostrar na tela as informaes desses objetos.

    3 Em uma escola, alm dos alunos temos os funcionrios, que tambm precisam ser represen-tados em nossa aplicao. Ento implemente outra classe na pasta orientacao-a-objetos chamadaFuncionario que contenha trs atributos: o primeiro para o nome, o segundo para o cargo e o ter-ceiro para o salrio dos funcionrios

    4 Faa uma classe chamada TestaFuncionario e crie dois objetos da classe Funcionario atri-buindo valores a eles. Mostre na tela as informaes desses objetos.

    5 Em uma escola, os alunos precisam ser divididos por turmas, que devem ser representadas den-tro da aplicao. Implemente na pasta orientacao-a-objetos um classe chamada Turma que conte-nha quatro atributos: o primeiro para o perodo, o segundo para definir a srie, o terceiro para siglae o quarto para o tipo de ensino.

    www.facebook.com/k19treinamentos 39

  • ORIENTAO A OBJETOS 40

    6 Faa uma classe chamada TestaTurma para criar dois objetos da classe Turma. Adicione infor-maes a eles e depois mostre essas informaes na tela.

    Relacionamentos: Associao, Agregao e Composio

    Todo cliente do banco pode adquirir um carto de crdito. Suponha que um cliente adquiraum carto de crdito. Dentro do sistema do banco, deve existir um objeto que represente o cliente eoutro que represente o carto de crdito. Para expressar a relao entre o cliente e o carto de crdito,algum vnculo entre esses dois objetos deve ser estabelecido.

    DEBIT

    DEBIT

    DEBIT

    Figura 3.10: Clientes e cartes

    Duas classes deveriam ser criadas: uma para definir os atributos e mtodos dos clientes e outrapara os atributos e mtodos dos cartes de crdito. Para expressar o relacionamento entre cliente ecarto de crdito, podemos adicionar um atributo do tipo Cliente na classe CartaoDeCredito.

    1 class Cliente2 {3 public string nome;4 }

    Cdigo C# 3.26: Cliente.cs

    1 class CartaoDeCredito2 {3 public int numero;4 public string dataDeValidade;5 public Cliente cliente;6 }

    Cdigo C# 3.27: CartaoDeCredito.cs

    Esse tipo de relacionamento chamado de Agregao. H uma notao grfica na linguagemUML para representar uma agregao. Veja o diagrama abaixo.

    Figura 3.11: Agregao entre clientes e cartes de crdito.

    40 www.k19.com.br

  • 41 ORIENTAO A OBJETOS

    No relacionamento entre carto de crdito e cliente, um carto de crdito s pode se relacionarcom um nico cliente. Por isso, no diagrama acima, o nmero 1 colocado ao lado da classe Cliente.Por outro lado, um cliente pode se relacionar com muitos cartes de crdito. Por isso, no diagramaacima, o caractere * colocado ao lado da classe CartaoDeCredito.

    O relacionamento entre um objeto da classe Cliente e um objeto da classe CartaoDeCredito s concretizado quando a referncia do objeto da classe Cliente armazenada no atributo clientedo objeto da classe CartaoDeCredito. Depois de relacionados, podemos acessar, indiretamente, osatributos do cliente atravs da referncia do objeto da classe CartaoDeCredito.

    1 // Criando um objeto de cada classe2 CartaoDeCredito cdc = new CartaoDeCredito ();3 Cliente c = new Cliente ();45 // Ligando os objetos6 cdc.cliente = c;78 // Acessando o nome do cliente9 cdc.cliente.nome = "Rafael Cosentino";

    Cdigo C# 3.28: Concretizando uma agregaco

    numero = 123dataValidade = 01/2012cliente = null

    CARTO

    numero = 123dataValidade = 01/2012cliente = null

    CARTO

    nome = Jonas Hiratacpf = 123.456.789-0

    CLIENTE

    numero = 123dataValidade = 01/2012cliente

    CARTO

    nome = Jonas Hiratacpf = 123.456.789-0

    CLIENTE

    Figura 3.12: Conectando um cliente e um carto

    Exerccios de Fixao

    12 Defina um vnculo entre os objetos que representam os clientes e os objetos que representam oscartes de crdito. Para isso, voc deve alterar a classe CartaoDeCredito.

    1 class CartaoDeCredito2 {

    www.facebook.com/k19treinamentos 41

  • ORIENTAO A OBJETOS 42

    3 public int numero;4 public string dataDeValidade;56 // Adicione a linha abaixo7 public Cliente cliente;89 }

    Cdigo C# 3.29: CartaoDeCredito.cs

    13 Teste o relacionamento entre clientes e cartes de crdito.

    1 class TestaClienteECartao2 {3 static void Main()4 {5 // Criando alguns objetos6 Cliente c = new Cliente ();7 CartaoDeCredito cdc = new CartaoDeCredito ();89 // Carregando alguns dados10 c.nome = "Rafael Cosentino";11 cdc.numero = 111111;1213 // Ligando os objetos14 cdc.cliente = c;1516 System.Console.WriteLine(cdc.numero);17 System.Console.WriteLine(cdc.cliente.nome);18 }19 }

    Cdigo C# 3.30: TestaClienteECartao.cs

    Compile e execute a classe TestaClienteECartao.

    14 Defina um vnculo entre os objetos que representam as agncias e os objetos que representamos contas. Para isso, voc deve alterar a classe Conta.

    1 class Conta2 {3 public int numero;4 public double saldo;5 public double limite = 100;67 // Adicione a linha abaixo8 public Agencia agencia;9 }

    Cdigo C# 3.31: Conta.cs

    15 Teste o relacionamento entre contas e agncias.

    1 class TestaContaEAgencia2 {3 static void Main()4 {5 // Criando alguns objetos6 Agencia a = new Agencia ();7 Conta c = new Conta();

    42 www.k19.com.br

  • 43 ORIENTAO A OBJETOS

    89 // Carregando alguns dados10 a.numero = 178;11 c.saldo = 1000.0;1213 // Ligando os objetos14 c.agencia = a;1516 System.Console.WriteLine(c.agencia.numero);17 System.Console.WriteLine(c.saldo);18 }19 }

    Cdigo C# 3.32: TestaContaEAgencia.cs

    Compile e execute a classe TestaContaEAgencia.

    Exerccios Complementares

    7 Defina um vnculo entre os alunos e as turmas, criando na classe Aluno um atributo do tipoTurma.

    8 Teste o relacionamento entre os alunos e as turmas, criando um objeto de cada classe e atri-buindo valores a eles. Exiba na tela os valores que esto nos atributos da turma atravs do objeto daclasse Aluno.

    Mtodos

    No banco, possvel realizar diversas operaes em uma conta: depsito, saque, transferncia,consultas e etc. Essas operaes podem modificar ou apenas acessar os valores dos atributos dosobjetos que representam as contas.

    Essas operaes so realizadas em mtodos definidos na prpria classe Conta. Por exemplo, pararealizar a operao de depsito, podemos acrescentar o seguinte mtodo na classe Conta.

    1 void Deposita(double valor)2 {3 // implementao4 }

    Cdigo C# 3.35: Definindo um mtodo

    Podemos dividir um mtodo em quatro partes:

    Nome: utilizado para chamar o mtodo. Na linguagem C#, uma boa prtica definir os nomesdos mtodos utilizando a conveno Camel Case com a primeira letra maiscula.

    Lista de Parmetros: Define os valores que o mtodo deve receber. Mtodos que no devem rece-ber nenhum valor possuem a lista de parmetros vazia.

    Corpo: Define o que acontecer quando o mtodo for chamado.

    www.facebook.com/k19treinamentos 43

  • ORIENTAO A OBJETOS 44

    Retorno: A resposta que ser devolvida ao final do processamento do mtodo. Quando um mtodono devolve nenhuma resposta, ele deve ser marcado com a palavra reservada void.

    Retorno Nome Lista de parmetros

    Corpo

    void Deposita ( double valor ) {

    this.saldo += valor;

    }

    Figura 3.13: Estrutura de um mtodo

    44 www.k19.com.br

  • 45 ORIENTAO A OBJETOS

    Para realizar um depsito, devemos chamar o mtodo Deposita() atravs da referncia do ob-jeto que representa a conta que ter o dinheiro creditado.

    1 // Referncia de um objeto2 Conta c = new Conta();34 // Chamando o mtodo Deposita ()5 c.Deposita (1000);

    Cdigo C# 3.36: Chamando o mtodo Deposita()

    Normalmente, os mtodos acessam ou alteram os valores armazenados nos atributos dos obje-tos. Por exemplo, na execuo do mtodo Deposita(), necessrio alterar o valor do atributo saldodo objeto que foi escolhido para realizar a operao.

    Dentro de um mtodo, para acessar os atributos do objeto que est processando o mtodo, de-vemos utilizar a palavra reservada this.

    1 void Deposita(double valor)2 {3 this.saldo += valor;4 }

    Cdigo C# 3.37: Utilizando o this para acessar e/ou modificar um atributo

    O mtodo Deposita() no possui nenhum retorno lgico. Por isso, foi marcado com void. Mas,para outros mtodos, pode ser necessrio definir um tipo de retorno especfico.

    Considere, por exemplo, um mtodo para realizar a operao que consulta o saldo disponveldas contas. Suponha tambm que o saldo disponvel igual a soma do saldo e do limite. Ento, essemtodo deve somar os atributos saldo e limite e devolver o resultado. Por outro lado, esse mtodono deve receber nenhum valor, pois todas as informaes necessrias para realizar a operao estonos atributos dos objetos que representam as contas.

    1 double ConsultaSaldoDisponivel ()2 {3 return this.saldo + this.limite;4 }

    Cdigo C# 3.38: Mtodo com retorno double

    Ao chamar o mtodo ConsultaSaldoDisponivel() a resposta pode ser armazenada em umavarivel do tipo double.

    1 Conta c = new Conta();2 c.Deposita (1000);34 // Armazenando a resposta de um mtodo em uma varivel5 double saldoDisponivel = c.ConsultaSaldoDisponivel ();67 System.Console.WriteLine("Saldo Disponvel: " + saldoDisponivel);

    Cdigo C# 3.39: Armazenando a resposta de um mtodo

    Exerccios de Fixao

    www.facebook.com/k19treinamentos 45

  • ORIENTAO A OBJETOS 46

    16 Acrescente alguns mtodos na classe Conta para realizar as operaes de deposito, saque, im-presso de extrato e consulta do saldo disponvel.

    1 class Conta2 {3 public int numero;4 public double saldo;5 public double limite = 100;6 public Agencia agencia;78 // Adicione os mtodos abaixo910 public void Deposita(double valor)11 {12 this.saldo += valor;13 }1415 public void Saca(double valor)16 {17 this.saldo -= valor;18 }1920 public void ImprimeExtrato ()21 {22 System.Console.WriteLine("SALDO: " + this.saldo);23 }2425 public double ConsultaSaldoDisponivel ()26 {27 return this.saldo + this.limite;28 }29 }

    Cdigo C# 3.40: Conta.cs

    17 Teste os mtodos da classe Conta.

    1 class TestaMetodosConta2 {3 static void Main()4 {5 Conta c = new Conta();67 c.Deposita (1000);8 c.ImprimeExtrato ();910 c.Saca (100);11 c.ImprimeExtrato ();1213 double saldoDisponivel = c.ConsultaSaldoDisponivel ();14 System.Console.WriteLine("SALDO DISPONVEL: " + saldoDisponivel);15 }16 }

    Cdigo C# 3.41: TestaMetodosConta.cs

    Compile e execute a classe TestaMetodosConta.

    Exerccios Complementares

    46 www.k19.com.br

  • 47 ORIENTAO A OBJETOS

    9 Sabendo que qualquer empresa possui funcionrios, crie uma classe chamada Funcionario pararepresent-los. Acrescente os atributos nome e salario a essa classe. Alm disso, voc deve criar doismtodos: um para aumentar o salrio e outro para consultar os dados dos funcionrios.

    10 Crie uma classe chamada TestaFuncionario para testar os mtodos de um objeto da classeFuncionario.

    Sobrecarga (Overloading)

    Os clientes dos bancos costumam consultar periodicamente informaes relativas s suas con-tas. Geralmente, essas informaes so obtidas atravs de extratos. No sistema do banco, os extratospodem ser gerados por mtodos da classe Conta.

    1 class Conta2 {3 public double saldo;4 public double limite;56 public void ImprimeExtrato(int dias)7 {8 // extrato9 }10 }

    Cdigo C# 3.44: Conta.cs

    O mtodo ImprimeExtrato() recebe a quantidade de dias que deve ser considerada para geraro extrato da conta. Por exemplo, se esse mtodo receber o valor 30 ento ele deve gerar um extratocom as movimentaes dos ltimos 30 dias.

    Em geral, extratos dos ltimos 15 dias atendem as necessidades dos clientes. Dessa forma, po-deramos acrescentar um mtodo na classe Conta para gerar extratos com essa quantidade fixa dedias.

    1 class Conta2 {3 public double saldo;4 public double limite;56 public void ImprimeExtrato ()7 {8 // extrato dos ltimos 15 dias9 }1011 public void ImprimeExtrato(int dias)12 {13 // extrato14 }15 }

    Cdigo C# 3.45: Conta.cs

    O primeiro mtodo no recebe parmetros pois ele utilizar uma quantidade de dias padrodefinida pelo banco para gerar os extratos (15 dias).

    O segundo recebe um valor inteiro como parmetro e deve considerar essa quantidade de dias

    www.facebook.com/k19treinamentos 47

  • ORIENTAO A OBJETOS 48

    para gerar os extratos.

    Os dois mtodos possuem o mesmo nome e lista de parmetros diferentes. Quando dois ou maismtodos so definidos na mesma classe com o mesmo nome, dizemos que houve uma sobrecargade mtodos. Uma sobrecarga de mtodos s vlida se as listas de parmetros dos mtodos sodiferentes entre si.

    No caso dos dois mtodos que geram extratos, poderamos evitar repetio de cdigo fazendoum mtodo chamar o outro.

    1 class Conta2 {3 public double saldo;4 public double limite;56 public void ImprimeExtrato(int dias)7 {8 // extrato9 }1011 public void ImprimeExtrato ()12 {13 this.ImprimeExtrato (15);14 }15 }

    Cdigo C# 3.46: Conta.cs

    Exerccios de Fixao

    18 Crie uma classe chamada Gerente para definir os objetos que representaro os gerentes dobanco. Defina dois mtodos de aumento salarial nessa classe. O primeiro deve aumentar o salriocom uma taxa fixa de 10%. O segundo deve aumentar o salrio com uma taxa varivel.

    1 class Gerente2 {3 public string nome;4 public double salario;56 public void AumentaSalario ()7 {8 this.AumentaSalario (0.1);9 }1011 public void AumentaSalario(double taxa)12 {13 this.salario += this.salario * taxa;14 }15 }

    Cdigo C# 3.47: Gerente.cs

    19 Teste os mtodos de aumento salarial definidos na classe Gerente.

    1 class TestaGerente2 {3 static void Main()

    48 www.k19.com.br

  • 49 ORIENTAO A OBJETOS

    4 {5 Gerente g = new Gerente ();6 g.salario =1000;78 System.Console.WriteLine("Salrio: " + g.salario);910 System.Console.WriteLine("Aumentando o salrio em 10% ");11 g.AumentaSalario ();1213 System.Console.WriteLine("Salrio: " + g.salario);1415 System.Console.WriteLine("Aumentando o salrio em 30% ");16 g.AumentaSalario (0.3);1718 System.Console.WriteLine("Salrio: " + g.salario);19 }20 }

    Cdigo C# 3.48: TestaGerente.cs

    Compile e execute a classe TestaGerente.

    Construtores

    No domnio de um banco, todo carto de crdito deve possuir um nmero. Toda agncia devepossuir um nmero. Toda conta deve estar associada a uma agncia.

    Aps criar um objeto para representar um carto de crdito, poderamos definir um valor parao atributo numero. De maneira semelhante, podemos definir um nmero para um objeto da classeAgencia e uma agncia para um objeto da classe Conta.

    1 CartaoDeCredito cdc = new CartaoDeCredito ();2 cdc.numero = 12345;

    Cdigo C# 3.49: Definindo um nmero para um carto de crdito

    1 Agencia a = new Agencia ();2 a.numero = 11111;

    Cdigo C# 3.50: Definindo um nmero para uma agncia

    1 Conta c = new Conta();2 c.agencia = a;

    Cdigo C# 3.51: Definindo uma agncia para uma conta

    Definir os valores dos atributos obrigatrios de um objeto logo aps a criao dele resolveria asrestries do sistema do banco. Porm, nada garante que todos os desenvolvedores sempre lembremde inicializar esses valores.

    Para no correr esse risco, podemos utilizar construtores. Um construtor permite que um de-terminado trecho de cdigo seja executado toda vez que um objeto criado, ou seja, toda vez queo operador new chamado. Assim como os mtodos, os construtores podem receber parmetros.Contudo, diferentemente dos mtodos, os construtores no devolvem resposta.

    Em C#, um construtor deve ter o mesmo nome da classe na qual ele foi definido.

    www.facebook.com/k19treinamentos 49

  • ORIENTAO A OBJETOS 50

    1 class CartaoDeCredito2 {3 public int numero;45 public CartaoDeCredito(int numero)6 {7 this.numero = numero;8 }9 }

    Cdigo C# 3.52: CartaoDeCredito.cs

    1 class Agencia2 {3 public int numero;45 public Agencia(int numero)6 {7 this.numero = numero;8 }9 }

    Cdigo C# 3.53: Agencia.cs

    1 class Conta2 {3 Agencia agencia;45 public Conta(Agencia agencia)6 {7 this.agencia = agencia;8 }9 }

    Cdigo C# 3.54: Conta.cs

    Na criao de um objeto com o comando new, os argumentos passados devem ser compatveiscom a lista de parmetros de algum construtor definido na classe que est sendo instanciada. Casocontrrio, um erro de compilao ocorrer para avisar o desenvolvedor dos valores obrigatrios quedevem ser passados para criar um objeto.

    1 // Passando corretamente os parmetros para os construtores2 CartaoDeCredito cdc = new CartaoDeCredito (1111);34 Agencia a = new Agencia (1234);56 Conta c = new Conta(a);

    Cdigo C# 3.55: Construtores

    1 // ERRO DE COMPILAO2 CartaoDeCredito cdc = new CartaoDeCredito ();34 // ERRO DE COMPILAO5 Agencia a = new Agencia ();67 // ERRO DE COMPILAO8 Conta c = new Conta();

    Cdigo C# 3.56: Construtores

    50 www.k19.com.br

  • 51 ORIENTAO A OBJETOS

    Construtor Padro

    Toda vez que um objeto criado, um construtor da classe correspondente deve ser chamado.Mesmo quando nenhum construtor for definido explicitamente, h um construtor padro que serinserido pelo prprio compilador. O construtor padro no recebe parmetros e ser inserido sem-pre que o desenvolvedor no definir pelo menos um construtor explicitamente.

    Portanto, para instanciar uma classe que no possui construtores definidos no cdigo fonte, de-vemos utilizar o construtor padro, j que este inserido automaticamente pelo compilador.

    1 class Conta2 {34 }

    Cdigo C# 3.57: Conta.cs

    1 // Chamando o construtor padro2 Conta c = new Conta();

    Cdigo C# 3.58: Utilizando o construtor padro

    Lembrando que o construtor padro s ser inserido pelo compilador se nenhum construtor fordefinido no cdigo fonte. Dessa forma, se voc adicionar um construtor com parmetros ento nopoder utilizar o comando new sem passar argumentos, pois um erro de compilao ocorrer.

    1 class Agencia2 {3 public int numero;45 public Agencia(int numero)6 {7 this.numero = numero;8 }9 }

    Cdigo C# 3.59: Agencia.cs

    1 // ERRO DE COMPILAO2 Agencia a = new Agencia ();

    Cdigo C# 3.60: Chamando um construtor sem argumentos

    Sobrecarga de Construtores

    O conceito de sobrecarga de mtodos pode ser aplicado para construtores. Dessa forma, pode-mos definir diversos construtores na mesma classe.

    1 class Pessoa2 {3 public string rg;4 public int cpf;56 public Pessoa(string rg)7 {8 this.rg = rg;9 }1011 public Pessoa(int cpf)

    www.facebook.com/k19treinamentos 51

  • ORIENTAO A OBJETOS 52

    12 {13 this.cpf = cpf;14 }15 }

    Cdigo C# 3.61: Pessoa.cs

    Quando dois construtores so definidos, h duas opes no momento de utilizar o comando new.

    1 // Chamando o primeiro construtor2 Pessoa p1 = new Pessoa("123456X");34 // Chamando o segundo construtor5 Pessoa p2 = new Pessoa (123456789);

    Cdigo C# 3.62: Utilizando dois construtores diferentes

    Construtores chamando Construtores

    Assim como podemos encadear, mtodos tambm podemos encadear construtores.

    1 class Conta2 {3 public int numero;4 public double limite;56 public Conta(int numero)7 {8 this.numero = numero;9 }1011 public Conta(int numero , double limite) : this(numero)12 {13 this.limite = limite;14 }15 }

    Cdigo C# 3.63: Conta.cs

    Exerccios de Fixao

    20 Acrescente um construtor na classe Agencia para receber um nmero como parmetro.

    1 class Agencia2 {3 public int numero;45 // Adicione o contrutor abaixo67 public Agencia(int numero)8 {9 this.numero = numero;10 }11 }

    Cdigo C# 3.64: Agencia.cs

    52 www.k19.com.br

  • 53 ORIENTAO A OBJETOS

    21 Tente compilar novamente o arquivo TestaContaEAgencia. Observe o erro de compilao.

    22 Altere o cdigo da classe TestaContaEAgencia para que o erro de compilao seja resolvido.Substitua linhas semelhantes a

    1 Agencia a = new Agencia ();

    Cdigo C# 3.65: Cdigo antigo

    por linhas semelhantes a

    1 Agencia a = new Agencia (1234);

    Cdigo C# 3.66: Cdigo novo

    Compile novamente o arquivo TestaContaEAgencia.

    23 Acrescente um construtor na classe CartaoDeCredito para receber um nmero como parm