K19 - K31 -C# e Orientação a Objetos

download K19 - K31 -C# e Orientação a Objetos

of 186

Transcript of K19 - K31 -C# e Orientação a Objetos

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    1/186

    TREINAMENTOS

    C# e Orientao a Objetos

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    2/186

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    3/186

    C# e Orientao a Objetos

    9 de abril de 2013

    Sumrio i

    Sobre a K19 1

    Seguro Treinamento 2

    Termo de Uso 3

    Cursos 4

    1 Introduo 51.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2 Orientao a Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.3 Plataforma .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.4 Plataforma .NET VS Orientao a Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    2 Lgica 72.1 O que um Programa? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.2 Linguagem de Mquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3 Linguagem de Programao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.4 Compilador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    2.5 Mquinas Virtuais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.6 Exemplo de programa C#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.7 Mtodo Main - Ponto de Entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.8 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.9 Variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.10 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.11 IF-ELSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.12 WHILE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.13 FOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.14 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.15 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    3 Orientao a Objetos 25

    www.facebook.com/k19treinamentos i

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    4/186

    SUMRIO ii

    3.1 Domnio e Aplicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.2 Objetos, Atributos e Mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.3 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.4 Referncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.5 Manipulando Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.6 Valores Padro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.7 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.8 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.9 Relacionamentos: Associao, Agregao e Composio . . . . . . . . . . . . . . . . . . 383.10 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.11 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.12 Mtodos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.13 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433.14 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

    3.15 Sobrecarga (Overloading) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453.16 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463.17 Construtores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.18 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503.19 Referncias como parmetro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.20 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543.21 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    4 Arrays 574.1 Criando um array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574.2 Modificando o contedo de um array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584.3 Acessando o contedo de um array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584.4 Percorrendo um Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594.5 foreach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604.6 Operaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604.7 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604.8 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

    5 IDE - Integrated Development Environment 635.1 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

    6 Atributos e Mtodos de Classe 696.1 Atributos Estticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

    6.2 Mtodos Estticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706.3 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716.4 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

    7 Encapsulamento 757.1 Atributos Privados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757.2 Mtodos Privados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767.3 Mtodos Pblicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767.4 Implementao e Interface de Uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777.5 Por qu encapsular? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777.6 Celular - Escondendo a complexidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

    7.7 Carro - Evitando efeitos colateiras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787.8 Mquinas de Porcarias - Aumentando o controle. . . . . . . . . . . . . . . . . . . . . . . 79

    ii www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    5/186

    iii SUMRIO

    7.9 Acessando ou modificando atributos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807.10 Propriedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817.11 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827.12 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

    8 Herana 858.1 Reutilizao de Cdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858.2 Uma classe para todos os servios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858.3 Uma classe para cada servio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 868.4 Uma classe genrica e vrias especficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878.5 Preo Fixo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898.6 Reescrita de Mtodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898.7 Fixo + Especfico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908.8 Construtores e Herana. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918.9 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928.10 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

    9 Polimorfismo 979.1 Controle de Ponto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979.2 Modelagem dos funcionrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989.3 UM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999.4 Melhorando o controle de ponto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999.5 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009.6 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

    10 Classes Abstratas 10310.1 Classes Abstratas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10310.2 Mtodos Abstratos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10410.3 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10510.4 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

    11 Interfaces 10911.1 Padronizao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10911.2 Contratos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10911.3 Exemplo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11011.4 Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11111.5 Interface e Herana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11211.6 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

    12 Namespace 11712.1 Organizao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11712.2 O comando namespace. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11712.3 Namespaces Encadeados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11712.4 Namespace global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11812.5 Unqualified Name vs Fully Qualified Name . . . . . . . . . . . . . . . . . . . . . . . . . . 11812.6 Using . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11912.7 Nveis de visibilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12012.8 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

    13 Exceptions 123

    www.facebook.com/k19treinamentos iii

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    6/186

    SUMRIO iv

    13.1 Exceptions e SystemExceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12313.2 Lanando erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12413.3 Capturando erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12413.4 finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12513.5 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

    14 Object 12714.1 Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12714.2 O mtodo ToString(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12814.3 O mtodo Equals(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13014.4 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

    15 String 13515.1 Imutabilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13515.2 Mtodos e Propriedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

    15.3 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

    16 Entrada e Sada 13916.1 Leitura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13916.2 Escrita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13916.3 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14016.4 Exerccios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

    17 Collections 14317.1 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14317.2 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

    17.3 Generics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14717.4 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14917.5 Conjuntos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15017.6 Colees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15017.7 Lao foreach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15117.8 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

    18 Threads 15318.1 Definindo Tarefas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15318.2 Executando Tarefas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15418.3 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

    18.4 Controlando a Execuo das Tarefas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15518.5 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

    A Quizzes 159

    B Respostas 161

    iv www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    7/186

    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 se tornamcapacitados 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

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    8/186

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    9/186

    3 SUMRIO

    Termo de Uso

    Termo 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

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    10/186

    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

    TREIN

    AMENT

    OS

    TREINAMENTOS

    TREINAMENTOS 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/26/2018 K19 - K31 -C# e Orientao a Objetos

    11/186

    INTRODUO

    CAP

    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.NETeJavaso as mais utilizadas no desenvolvimento de software. Para utilizaros recursos oferecidos por essas plataformas de forma eficiente, necessrio possuir conhecimentoslido emorientao a objetos.

    Orientao a Objetos

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

    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-

    deloorientado a objetos. Esse modelo utilizado com o intuito de obter alguns benefcios especfi-cos. Normalmente, o principal benefcio desejado facilitar amanutenodas aplicaes.

    www.facebook.com/k19treinamentos 5

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    12/186

    INTRODUO 6

    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.

    6 www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    13/186

    LGICA

    CAP

    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 possuemessa 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 deprogramas.

    Os programas devem ser colocadosem arquivos no disco rgido doscomputadores. 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 emlinguagem de mquina. Uma instruoescrita em linguagem de mquina uma sequncia formada por 0s e 1s que representa a ao

    que um computador deve executar.

    000000000000000000000000000000000000000000000000000000000000000

    000000000000000000000000000000000000000000010000000000100000000

    000000000000111000011111101110100000111000000000101101000000100

    111001101001000011011100000000001010011001100110100100001010101

    000110100001101001011100110010000001110000011100100110111101100

    111011100100110000101101101001000000110001101100001011011100110

    111001101111011101000010000001100010011001010010000001110010011

    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 7

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    14/186

    LGICA 8

    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 aslinguagens 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 s t a ti c v o id Main()4 {5 S ys te m. Co ns ol e. W ri te Li ne (" O l M u n do " );

    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 chamadodearquivo 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 chamadoscompiladores.

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

    Mquinas Virtuais

    8 www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    15/186

    9 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 pelaarquitetura do processadordesse 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 umsistema operacionalque 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).

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

    Uma empresa que deseja ter a sua aplicao disponvelpara 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 9

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    16/186

    LGICA 10

    Para tentar resolver o problema do desenvolvimento de aplicaes multiplataforma, surgiu oconceito demquina 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.

    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 chamados

    10 www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    17/186

    11 LGICA

    em um determinado momento da execuo para traduzi-los para a linguagem de mquina do com-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 s t a ti c v o id Main()4 {

    5 S ys te m. Co ns ol e. W ri te Li ne (" O l M u n do " );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 especialchamadoMainpara 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 para

    compilar esse arquivo. O compilador pode ser executado peloterminal.C : \ U s e r s \ K 1 9 \ D o cu m e n ts > c sc O l a M u n do . c sM i c ro s of t ( R ) V i su a l C # 2 1 C o m pi l er v e rs i on 4 . .3 31 9 . 1C o p y r i gh t ( C ) M i c r o s of t C o r p o r a ti o n . A l l r i g h ts r e s e r ve d .

    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 chamadoOlaMundo.exeeele pode ser executado atravs de um terminal.

    C:\Users\K19\Documents >OlaMundo.exeO l M u n d o

    Terminal 2.2: Executando

    www.facebook.com/k19treinamentos 11

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    18/186

    LGICA 12

    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 serstatice seu tipo de retorno pode servoidouint. Ele tambmpode declarar parmentros para receber os argumentos passados pela linha de comando e deve ser

    inserido em uma classe C#.

    Algumas das possveis variaes da assinatura do mtodo Main:

    1 s t a ti c v o id Main()2 s t a ti c i nt Main()3 s t a ti c v o id Main( string [ ] a r g s )4 s t a ti c i nt Main( string [ ] a r g s )

    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 s t a ti c v o id Main( string [ ] a r g s )4 {5 fo r ( in t i = ; i < a rg s . Le ng th ; i ++ )6 {7 System . Console . WriteLine (args [i ]) ;8 }9 }

    1 }

    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 : \ U s e r s \ K 1 9 \ D o cu m e n ts > c sc P r o g r a ma . c sM i c ro s of t ( R ) V i su a l C # 2 1 C o m pi l er v e rs i on 4 . .3 31 9 . 1C o p y r i gh t ( C ) M i c r o s of t C o r p o r a ti o n . A l l r i g h ts r e s e r ve d .

    C : \ U s e r s \ K 1 9 \ D o cu m e n ts > P r o g r a m a . e x e " R a f a e l C o s e n t in o " " M a r c e l o M a r t i ns "R a f a e l C o s e n t in oM a r c e lo M a r t i ns

    Terminal 2.3: Imprimindo os parmetros da linha de comando

    Exerccios de Fixao

    12 www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    19/186

    13 LGICA

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

    C : \ U s e r s \ K 1 9 \ D o cu m e n ts > md M a r c e lo

    Terminal 2.4: Criando a pasta de exerccios

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

    C : \ U s e r s \ K 1 9 \ D o cu m e n ts > cd M a r c e lo

    C : \ U s e r s \ K 1 9 \ D o c u me n t s \ M a r c el o > md l o g i ca

    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 s t a ti c v o id Main()4 {5 S ys te m. Co ns ol e. W ri te Li ne (" O l M u n do " );6 }7 }

    Cdigo C# 2.5: OlaMundo.cs

    Compile e execute a classeOlaMundo.

    Variveis

    Basicamente, o que um programa faz manipular dados. Em geral, esses dados so armazenadosemvariveislocalizadas 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 um

    escopo e um tipo de valor. As variveis so acessadas pelos nomes e armazenam valores compatveiscom o seu tipo.

    www.facebook.com/k19treinamentos 13

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    20/186

    LGICA 14

    1 / / U m a v a r i ve l d o t i p o i n t c h a m a d a n u m e r oD a C o nt a .2 in t numeroDaConta;34 / / U m a v a r i v el d o t i p o d o u b l e c h a m ad a p r e c oD o P r od u t o .

    5 double precoDoProduto;

    Cdigo C# 2.6: Declarao de Variveis

    Mais SobreUma linguagem de programao dita estaticamente tipadaquando 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 tipadaquando 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 camelcasecom a primeira letra minscula. Esse padro tambm conhecido comolower 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/ms2292.aspx

    A declarao de uma varivel pode ser realizada em qualquer linha de um bloco. No necessrio

    declarar todas as variveis no comeo do bloco como acontece em algumas linguagens de progra-mao.

    1 / / D e c l a r a o c o m I n i c i a l iz a o2 in t n u me ro = 1 ;34 / / U so d a v a r i v e l5 S y s te m . C o n s ol e . W r i t eL i n e ( n u me r o ) ;67 / / O u t r a D e c l ar a o c o m I n i c i al i z a o8 double p r e co = 1 3 7 .6 ;9

    1 / / U so d a v a r i v e l11 S y s te m . C o n s ol e . W r i t eL i n e ( p r ec o ) ;

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

    14 www.k19.com.br

    http://msdn.microsoft.com/en-us/library/ms229002.aspxhttp://msdn.microsoft.com/en-us/library/ms229002.aspxhttp://msdn.microsoft.com/en-us/library/ms229002.aspxhttp://msdn.microsoft.com/en-us/library/ms229002.aspx
  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    21/186

    15 LGICA

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

    1 / / D e cl a r a o

    2 in t n u me ro = 1 ;34 / / E r ro d e C o m p i la o5 in t n u me ro = 1 ;

    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 / / D e c la r a e s2 in t numero;3 double preco;45 / / I n i c ia l i z a o6 num ero = 1;78 / / U so C o r r et o9 S y s te m . C o n s ol e . W r i t eL i n e ( n u me r o ) ;

    111 / / E r ro d e c o m p i la o12 S y s te m . C o n s ol e . W r i t eL i n e ( p r ec o ) ;

    Cdigo C# 2.9: Inicializao

    Tipos Primitivos

    A linguagem C# define um conjunto de tipos bsicos de dados que so chamadostipos 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

    int Valor 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

    long Valor inteiro entre -9.223.372.036.854.775.808 e

    9.223.372.036.854.775.807 (inclusivo) 8 bytes

    ulong Valor 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

    double

    Valor com ponto flutuante entre 4,94065645841246544

    10324 e 1, 7976931348623157010308 (positivo ou nega-tivo)

    8 bytes

    www.facebook.com/k19treinamentos 15

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    22/186

    LGICA 16

    Tipo Descrio Tamanho (peso)

    decimal Valor com ponto flutuante entre 1,01028 e 7,91028

    (positivo ou negativo) 16 bytes

    bool true ou false 1 bit

    char Um nico caractere Unicode de 16 bits. Valor inteiro e

    positivo 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 tipoprimitivochararmazena apenas um caractere. Quando necessrio armazenar um

    texto, devemos utilizar o tipostring. Contudo, importante salientar que o tipo stringno 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

    in t u m Ma is Um = 1 + 1 ; / / u m Ma i sU m = 22 in t t r es V ez e sD o is = 3 * 2 ; / / t r es V ez e sD o is = 63 in t q u a t ro D iv i di d oP o r2 = 4 / 2 ; / / q u a t r oD i v i di d o P o r2 = 24 in t s e i sM o du l oC i nc o = 6 % 5 ; / / se i sM o du l oC i nc o = 15 in t 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.

    16 www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    23/186

    17 LGICA

    ImportanteO mdulo de um nmerox, na matemtica, o valor numrico de xdesconsiderandoo 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 in t v a lo r = 1 ; / / va lo r = 12 valor += 2; / / v al or = 33 valor -= 1; / / v al or = 24 valor *= 6; / / v al or = 1 25 valor /= 3; / / v al or = 46 v alor %= 3; / / v al or = 1

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

    As instrues acima poderiam ser escritas de outra forma:

    1 in t v a lo r = 1 ; / / v al or = 12 v alor = v alor + 2 ; / / v al or = 33 v alor = v alor - 1 ; / / v al or = 24 v alor = v alor * 6 ; / / v al or = 1 25 v alor = v alor / 3 ; / / v al or = 46 v alor = v alor % 3; / / v al or = 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 a

    quantidade de cdigo escrito. Podemos dizer que esses operadores funcionam como atalhos paraas operaes que utilizam os operadores aritmticos.

    www.facebook.com/k19treinamentos 17

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    24/186

    LGICA 18

    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 in t v a lo r = 2 ;

    2 bool t = false ;3 t = ( valor = = 2) ; / / t = t ru e4 t = ( valor ! = 2) ; / / t = fa ls e5 t = (valor < 2) ; / / t = fa ls e6 t = (v alor < = 2) ; / / t = t ru e7 t = (valor > 1) ; / / t = t ru e8 t = (v alor > = 1) ; / / t = t ru e

    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 in t v a lo r = 3 ;2 bool t e st e = false ;3 t es te = v al or < 4 & & v al or > 2 ; / / t es t e = t ru e4 t es te = v al or < 4 & & v al or > 3 ; / / t es t e = f al s e5 t es te = v al or > 3 | | v al or > 2 ; / / t es t e = t ru e6 t es te = v al or > 3 | | v al or < 2 ; / / t es t e = f al s e7 t es te = v al or < 5 & & v al or == 3 ; / / t es t e = t ru e

    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.

    18 www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    25/186

    19 LGICA

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

    1 if ( p r ec o < )

    2 {3 S ys te m . Co ns ol e . Wr it eL in e (" O p r e o d o p r od u to n o p od e s er n e ga t iv o ");4 }5 else6 {7 S ys te m . Co ns ol e . Wr it eL in e (" P r o d ut o c a d a st r a do c o m s u c e s s o ");8 }

    Cdigo C# 2.15: Comandoif

    O comandoif 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 doelseexecutado.

    O parmetro passado para o comando ifdeve ser um valor booleano, caso contrrio o cdigono compila. O comandoelsee 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 S ys t em . C o ns o le . W r it e Li n e (" B o m D i a ");

    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 comandowhile, possvel definir quantas vezes um determinado trecho de cdigodeve ser executado pelo computador.

    1 in t c o n ta d or = ;23 while ( c o n t a do r < 1 )

    4 {5 S ys te m . Co ns ol e . Wr it eL in e (" B o m D i a " );6 contador ++;7 }

    Cdigo C# 2.17: Comandowhile

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

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

    FOR

    www.facebook.com/k19treinamentos 19

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    26/186

    LGICA 20

    O comandofor anlogo aowhile. A diferena entre esses dois comandos que oforrecebetrs argumentos.

    1 fo r ( in t c o nt a do r = ; c o nt a do r < 1 ; c o nt a do r + +) {2 S ys te m . Co ns ol e . Wr it eL in e (" B o m D i a " );3 }

    Cdigo C# 2.18: Comandofor

    Exerccios de Fixao

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

    1 class ImprimeNome2 {3 s t a ti c v o id Main()4 {5 fo r ( in t c o n ta d or = ; c o nt a do r < 1 ; c o nt a do r + +)6 {7 System .Console .WriteLine (" M a r c el o M a r ti n s ") ;8 }9 }

    1 }

    Cdigo C# 2.19: ImprimeNome.cs

    Compile e execute a classeImprimeNome.

    C : \ U s e r s \ K 1 9 \ M a r ce l o \ l o g i ca > c sc I m p r i m eN o m e . c sM i c ro s of t ( R ) V i su a l C # 2 1 C o m pi l er v e rs i on 4 . .3 31 9 . 1C o p y r i gh t ( C ) M i c r o s of t C o r p o r a ti o n . A l l r i g h ts r e s e r ve d .

    C:\Users\K19\Marcelo\logica >ImprimeNome.exeM a r c e lo M a r t i nsM a r c e lo M a r t i nsM a r c e lo M a r t i ns . . .

    Terminal 2.6: Imprimindo 100 vezes um nome

    5 Imprima na tela os nmeros de 1 at 100. Adicione na pastalogicao seguinte arquivo.

    1 class ImprimeAte12 {3 s t a ti c v o id Main()4 {5 fo r ( in t c o n ta d o r = 1 ; c o n ta d o r < = 1 ; c o n ta d o r + +)6 {7 S ys te m. Co ns ol e. Wr it eL in e( co nt ad or ) ;8 }9 }

    1 }

    Cdigo C# 2.20: ImprimeAte100.cs

    Compile e execute a classeImprimeAte1.

    20 www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    27/186

    21 LGICA

    C : \ U s e r s \ K 1 9 \ D o c u me n t s \ M a r c e l o \ l o gi c a > cs c I m p r i m e At e 1 . c sM i c ro s of t ( R ) V i su a l C # 2 1 C o m pi l er v e rs i on 4 . .3 31 9 . 1C o p y r i gh t ( C ) M i c r o s of t C o r p o r a ti o n . A l l r i g h ts r e s e r ve d .

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

    12...

    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 pastalogica.

    1 class ImprimePadrao12 {3 s t a ti c v o id Main()4 {5 fo r ( in t c o n ta d o r = 1 ; c o n ta d o r < = 1 ; c o n ta d o r + +)6 {

    7 in t r e st o = c o nt a do r % 2 ;8 if ( r e st o = = 1 )9 {

    1 System .Console .WriteLine ("* " );11 }12 else13 {14 System .Console .WriteLine ("**" );15 }16 }17 }18 }

    Cdigo C# 2.21: ImprimePadrao1.cs

    Compile e execute a classeImprimePadrao1.

    C : \ U s e r s \ K 1 9 \ D o c u me n t s \ M a r c e l o \ l o gi c a > cs c I m p r i m e P ad r a o 1 . c sM i c ro s of t ( R ) V i su a l C # 2 1 C o m pi l er v e rs i on 4 . .3 31 9 . 1C o p y r i gh t ( C ) M i c r o s of t C o r p o r a ti o n . A l l r i g h ts r e s e r ve d .

    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 21

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    28/186

    LGICA 22

    12

    3

    PI5

    6

    7PI

    Adicione o seguinte arquivo na pastalogica.

    1 class ImprimePadrao22 {3 s t a ti c v o id Main()4 {5 fo r ( in t c o n ta d o r = 1 ; c o n ta d o r < = 1 ; c o n ta d o r + +)6 {7 in t r e st o = c o nt a do r % 4 ;8 if ( r e st o = = )9 {

    1 System .Console .WriteLine ("PI" );11 }12 else13 {14 S yst em . Cons ol e. Wri teL in e( con tad or );15 }16 }17 }18 }

    Cdigo C# 2.22: ImprimePadrao2.cs

    Compile e execute a classeImprimePadrao2

    K 1 C : \ U s e r s \ K 19 \ D o c u m e n t s \ M a r c e lo \ l o g i ca > c s c I m p r i m e P ad r a o 2 . c sM i c ro s of t ( R ) V i su a l C # 2 1 C o m pi l er v e rs i on 4 . .3 31 9 . 1C o p y r i gh t ( C ) M i c r o s of t C o r p o r a ti o n . A l l r i g h ts r e s e r ve d .

    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:

    *

    *****

    22 www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    29/186

    23 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.

    , 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:

    K 1 C : \ U s e r s \ K 19 \ D o c u m e n t s \ M a r c e lo \ l o g i ca > c s c G e r a d o r D e Pa d r o e s . c sM i c ro s of t ( R ) V i su a l C # 2 1 C o m pi l er v e rs i on 4 . .3 31 9 . 1C o p y r i gh t ( C ) M i c r o s of t C o r p o r a ti o n . A l l r i g h ts r e s e r ve d .

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

    G e r a d or d e P a d r es

    E s co l ha a o p o d e s ej a da :

    1 - P a d r o

    2 - P a d r o

    3 - P a d r o

    4 - P a d r o

    5 - P a d r o

    - S a ir

    Terminal 2.13: Menu

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

    sucessivamente.Abaixo est o esqueleto da sua classe:

    www.facebook.com/k19treinamentos 23

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    30/186

    LGICA 24

    1 / / V a mo s a p r en d e r n o s p r o x i m os c a p it u l o s p a r a q u e s e r v e o u s i n g .2 using System;3 using System.IO;4

    5 class GeradorDePadroes6 {7 s t a ti c v o id Main()8 {9 in t o p c = 1 ; / / T em os q ue a t ri b ui r o v a lo r 1 n a v ar i ve l , p ar a p o de r e n tr a r n o

    l a o d e r e p e ti o1 while ( o pc ! = )11 {12 / / C ol o qu e o c o di g o d o m en u a qu i .1314 / / Va m os a p r en d er m a is p ra f r en t e qu e e ss es s o os c o ma n do s p ar a r ec e be r e

    g u a rd a r a l gu m v a l or d a t e l a .1516 T ext Rea der te xtR ead er = Co nso le .In ;17 string v a l o r T e la = t e x t Re a d e r . R e ad L i ne ( ) ;18 opc = Convert . ToInt32 (valorTela );

    192 if ( o pc = = 1 )21 {22 / / C d i go p ar a o P a dr o 123 }24 e l se i f ( o pc = = 2 )25 {26 / / C d i go p ar a o P a dr o 227 }28 e l se i f ( o pc = = 3 )29 {3 / / C d i go p ar a o P a dr o 331 }32 e l se i f ( o pc = = 4 )33 {34 / / C d i go p ar a o P a dr o 4

    35 }36 e l se i f ( o pc = = 5 )37 {38 / / C d i go p ar a o P a dr o 539 }4 }41 }42 }

    Cdigo C# 2.26: GeradorDePadroes.cs

    24 www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    31/186

    ORIENTAO AOBJETOS

    CAP

    TU

    LO

    3Domnio e Aplicao

    Umdomnio composto pelas entidades, informaes e processos relacionados a um determi-nado contexto. Umaaplicaopode ser desenvolvida para automatizar ou tornar factvel as tarefas

    de 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.

    Figura 3.1: Domnio bancrio

    www.facebook.com/k19treinamentos 25

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    32/186

    ORIENTAO AOBJETOS 26

    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 nosatributosdo 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 nosmtodosdo 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.

    26 www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    33/186

    27 ORIENTAO AOBJETOS

    Figura 3.2: Mapeamento Domnio-Aplicao

    www.facebook.com/k19treinamentos 27

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    34/186

    ORIENTAO AOBJETOS 28

    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 umaclasseelaborada 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 diagramasUML. 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 classeContatero os atributos e mtodos mostrados no diagrama UML. Os valores dos

    atributos de dois objetos criados a partir da classe Contapodem ser diferentes.

    Figura 3.3: Diagrama UML da classe Conta.

    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.

    28 www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    35/186

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    36/186

    ORIENTAO AOBJETOS 30

    Classes em C#

    O conceito de classe apresentado anteriormente genrico e pode ser aplicado em diversas lin-guagens de programao. Mostraremos como a classeContapoderia ser escrita utilizando a lin-

    guagem C#. Inicialmente, discutiremos apenas sobre os atributos. Os mtodos sero abordadosposteriormente.

    1 class Conta2 {3 p u b li c d o u bl e saldo;4 p u b li c d o u bl e limite;5 p u b li c i n t numero;6 }

    Cdigo C# 3.1: Conta.cs

    A classe C#Conta declarada utilizando a palavra reservadaclass. No corpo dessa classe, so

    declaradas 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 saldoe limiteso do tipodouble, que permite armazenar nmeros com casas decimais, e o atributo numero dotipo int, que permite armazenar nmeros inteiros. O modificadorpublic 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 onew.

    1 class TestaConta2 {3 s t a ti c v o id Main()4 {5 ne w Conta();6 }7 }

    Cdigo C# 3.2: TestaConta.cs

    A linha com o comandonew poderia ser repetida cada vez que desejssemos criar (instanciar)um objeto da classeConta. A classeTestaContaserve apenas para colocarmos o mtodoMain, que o ponto de partida da aplicao.

    1 class TestaConta2 {

    30 www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    37/186

    31 ORIENTAO AOBJETOS

    3 s t a ti c v o id Main()4 {5 / / c r i an d o t r s o b j et o s6 ne w Conta();7 ne w Conta();

    8 ne w Conta();9 }

    1 }

    Cdigo C# 3.3: TestaConta.cs

    AnalogiaChamar o comandonewpassando 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.

    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.

    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 31

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    38/186

    ORIENTAO AOBJETOS 32

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

    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 comandonew, devemos utilizar variveis no primi-tivas.

    1 C on ta r ef er ec ia = ne w Conta();

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

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

    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

    C o n ta r e f e r e ci a = ne w Conta();23 r e fe r ec i a . sa ld o = 1 . ;4 r e fe r ec i a . li m it e = 5 . ;5 r ef er ec ia . n um er o = 1;67 S y s te m . C o n s ol e . W r i t eL i n e ( r e f er e c i a . s al d o ) ;8 S y s te m . C o n s ol e . W r i t eL i n e ( r e f er e c i a . l im i t e ) ;9 S y s te m . C o n s ol e . W r i t eL i n e ( r e f er e c i a . n um e r o ) ;

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

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

    32 www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    39/186

    33 ORIENTAO AOBJETOS

    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 booleanso inicializados comfalsee 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 s t a ti c v o id Main()4 {5 Conta conta = ne w Conta();67 / / i m pr i me 8 S ys te m . Co ns ol e . Wr it eL in e ( co nt a . li mi te ) ;9 }

    1 }

    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 atributolimite.

    1 class Conta2 {3 p u b li c d o u bl e l i m it e = 5 ;4 }

    Cdigo C# 3.8: Conta.cs

    1 class TestaConta2 {3 s t a ti c v o id Main()4 {5 Conta conta = ne w Conta();67 / / i m p ri m e 5 8 S ys te m . Co ns ol e . Wr it eL in e ( co nt a . li mi te ) ;9 }

    1 }

    Cdigo C# 3.9: TestaConta.cs

    Exerccios de Fixao

    www.facebook.com/k19treinamentos 33

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    40/186

    ORIENTAO AOBJETOS 34

    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 pastaorientacao-a-objetos.

    1 class Cliente2 {3 p u b li c s t r in g nome;4 p u b li c i n t codigo;5 }

    Cdigo C# 3.10: Cliente.cs

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

    1 class TestaCliente2 {3 s t a ti c v o id Main()4 {5 Cliente c1 = ne w Cliente();6 c1 . nome = " R a f a e l C o s en t i n o ";7 c1 . codigo = 1;89 Cliente c2 = ne w Cliente();

    1 c2 . nome = " J o n as H i r at a ";11 c2 . codigo = 2;1213 S ys te m . Co ns ol e . Wr it eL in e (c 1. n om e );14 S ys te m . Co ns ol e . Wr it eL in e (c 1. c od ig o );1516 S ys te m . Co ns ol e . Wr it eL in e (c 2. n om e );17 S yst em . Cons ol e. Wri teL in e( c2 .co dig o) ;18 }

    19 }

    Cdigo C# 3.11: TestaCliente.cs

    Compile e execute a classeTestaCliente.

    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 pastaorientacao-a-objetos.

    1 class CartaoDeCredito2 {3 p u b li c i n t numero;

    34 www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    41/186

    35 ORIENTAO AOBJETOS

    4 public string dataDeValidade;5 }

    Cdigo C# 3.12: CartaoDeCredito.cs

    5 Faa um teste criando dois objetos da classeCartaoDeCredito. Altere e imprima os atributosdesses objetos. Adicione o seguinte arquivo na pastaorientacao-a-objetos.

    1 class TestaCartaoDeCredito2 {3 s t a ti c v o id Main()4 {5 CartaoDeCredito cdc1 = ne w CartaoDeCredito();6 cdc1 .numero = 111111;7 cdc1 .dataDeValidade = "1/1/213";89 CartaoDeCredito cdc2 = ne w CartaoDeCredito();

    1 cdc2 .numero = 222222;11 cdc2 . da ta De Va li da de = "1/1/214";1213 S ys te m . Co ns ol e . Wr it eL in e ( cd c1 . n um er o );14 S y st em . C o ns o le . W r it e Li n e ( cd c1 . d a ta D eV a li d ad e ) ;1516 S ys te m . Co ns ol e . Wr it eL in e ( cd c2 . n um er o );17 S ys te m. Co ns ol e. W ri te Li ne ( cd c2 . da ta De Va li da de ) ;18 }19 }

    Cdigo C# 3.13: TestaCartaoDeCredito.cs

    Compile e execute a classeTestaCartaoDeCredito.

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

    1 class Agencia2 {3 p u b li c i n t numero;4 }

    Cdigo C# 3.14: Agencia.cs

    7 Faa um teste criando dois objetos da classeAgencia. Altere e imprima os atributos dessesobjetos. Adicione o seguinte arquivo na pastaorientacao-a-objetos.

    1 class TestaAgencia2 {3 s t a ti c v o id Main()4 {5 Agencia a1 = ne w Agencia();6 a1 . numero = 1234;78 Agencia a2 = ne w Agencia();9 a2 . numero = 5678;

    111 S ys te m . Co ns ol e . Wr it eL in e (a 1. n um er o );

    1213 S ys te m . Co ns ol e . Wr it eL in e (a 2. n um er o );14 }

    www.facebook.com/k19treinamentos 35

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    42/186

    ORIENTAO AOBJETOS 36

    15 }

    Cdigo C# 3.15: TestaAgencia.cs

    Compile e execute a classeTestaAgencia.

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

    1 class Conta2 {3 p u b li c i n t numero;4 p u b li c d o u bl e saldo;5 p u b li c d o u bl e 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 pastaorientacao-a-objetos.

    1 class TestaConta2 {3 s t a ti c v o id Main()4 {5 Conta c1 = ne w Conta();6 c1 . numero = 1234;7 c1 . saldo = 1;

    8 c1 . limite = 5;91 Conta c2 = ne w Conta();11 c2 .numero = 5678;12 c2 . saldo = 2;13 c2 . limite = 25;1415 S ys te m . Co ns ol e . Wr it eL in e (c 1. n um er o );16 S ys te m . Co ns ol e . Wr it eL in e (c 1. s al do ) ;17 S ys te m . Co ns ol e . Wr it eL in e (c 1. l im it e );1819 S ys te m . Co ns ol e . Wr it eL in e (c 2. n um er o );2 S ys te m . Co ns ol e . Wr it eL in e (c 2. s al do ) ;21 S ys te m . Co ns ol e . Wr it eL in e (c 2. l im it e );22 }23 }

    Cdigo C# 3.17: TestaConta.cs

    Compile e execute a classeTestaConta.

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

    1 class TestaValoresPadrao2 {3 s t a ti c v o id Main()4 {5 Conta c = ne w Conta();

    67 S ys te m . Co ns ol e . Wr it eL in e (c . nu me ro ) ;8 S ys te m . Co ns ol e . Wr it eL in e (c . sa ld o );

    36 www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    43/186

    37 ORIENTAO AOBJETOS

    9 S ys te m . Co ns ol e . Wr it eL in e (c . li mi te ) ;1 }11 }

    Cdigo C# 3.18: TestaValoresPadrao.cs

    Compile e execute a classeTestaValoresPadrao.

    11 Alterea classeContapara que todos os objetos criados a partir dessa classe possuam R$ 100 delimite inicial.

    1 class Conta2 {3 p u b li c i n t numero;4 p u b li c d o u bl e saldo;

    56 / / A d i ci o n e a l i n ha a b a ix o7 p u b li c d o u bl e l i m it e = 1 ;8 }

    Cdigo C# 3.19: Conta.cs

    Compile e execute a classeTestaValoresPadrao.

    Exerccios Complementares

    1 Implemente uma classe chamadaAlunona pastaorientacao-a-objetospara 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 chamadaTestaAlunoe crie dois objetos da classeAlunoatribuindo 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-objetoschamadaFuncionarioque contenha trs atributos: o primeiro para o nome e o segundo para o cargo o ter-ceiro cargo dos funcionrios

    4 Faa uma classe chamada TestaFuncionarioe crie dois objetos da classe Funcionarioatri-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 pastaorientacao-a-objetosum classe chamadaTurmaque 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 37

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    44/186

    ORIENTAO AOBJETOS 38

    6 Faa uma classe chamadaTestaTurmapara 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.

    Figura 3.10: Clientes e cartes

    Duas classes deveriam ser criadas: uma para definir os atributos e mtodos dos clientes e outra

    para os atributos e mtodos dos cartes de crdito. Para expressar o relacionamento entre cliente ecarto de crdito, podemos adicionar um atributo do tipoClientena classeCartaoDeCredito.

    1

    class Cliente2 {3 public string nome;4 }

    Cdigo C# 3.26: Cliente.cs

    1 class CartaoDeCredito2 {3 p u b li c i n t numero;4 p u b li c s t r in g dataDeValidade;5 public C l i e n te c l i en t e ;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.

    38 www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    45/186

    39 ORIENTAO AOBJETOS

    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 classeCartaoDeCredito.

    O relacionamento entre um objeto da classeClientee um objeto da classeCartaoDeCreditos concretizado quando a referncia do objeto da classeCliente armazenada no atributoclientedo objeto da classeCartaoDeCredito. Depois de relacionados, podemos acessar, indiretamente, osatributos do cliente atravs da referncia do objeto da classeCartaoDeCredito.

    1 / / C r i an d o u m o b j et o d e c ad a c l a ss e2 C ar ta oD eC re di to c dc = ne w CartaoDeCredito();3 Cliente c = ne w Cliente();45 / / L i g an d o o s o b j et o s6 c dc . cl ie nt e = c ;7

    8 / / A c e ss a nd o o n om e d o c l ie n te9 c dc . c li en te . n om e = " R a f a e l C o s en t i n o ";

    Cdigo C# 3.28: Concretizando uma agregaco

    numero = 123dataValidade = 01/2012cliente = null

    CARTO

    numero = 123dataValidade = 01/2012cliente = null

    CARTOnome = 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 devealterara classeCartaoDeCredito.

    1 class CartaoDeCredito2 {

    www.facebook.com/k19treinamentos 39

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    46/186

    ORIENTAO AOBJETOS 40

    3 p u b li c i n t numero;4 public string dataDeValidade;56 / / A d i ci o n e a l i n ha a ba i x o7 public C l i e n t e c l i en t e ;

    89 }

    Cdigo C# 3.29: CartaoDeCredito.cs

    13 Teste o relacionamento entre clientes e cartes de crdito.

    1 class TestaClienteECartao2 {3 s t a ti c v o id Main()4 {5 / / C r i an d o a l g un s o b j et o s

    6 Cliente c = ne w Cliente();7 CartaoDeCredito cdc = ne w CartaoDeCredito();89 / / C a r r eg a n d o a l g un s d a d os

    1 c. nome = " R a f a e l C o s en t i n o ";11 cdc .numero = 111111;1213 / / L i g an d o o s o b j et o s14 cdc . cliente = c ;1516 S ys te m . Co ns ol e . Wr it eL in e ( cd c .n um er o );17 S ys te m . Co ns ol e . Wr it eL in e ( cd c .c li en te . n om e );18 }19 }

    Cdigo C# 3.30: TestaClienteECartao.cs

    Compile e execute a classeTestaClienteECartao.

    14 Defina um vnculo entre os objetos que representam as agncias e os objetos que representamos contas. Para isso, voc devealterara classeConta.

    1 class Conta2 {3 p u b li c i n t numero;4 p u b li c d o u bl e saldo;5 p u b li c d o u bl e l i m it e = 1 ;67 / / A d i ci o n e a l i n ha a ba i x o8 public A g e n c ia a g e nc i a ;9 }

    Cdigo C# 3.31: Conta.cs

    15 Teste o relacionamento entre contas e agncias.

    1 class TestaContaEAgencia2 {3 s t a ti c v o id Main()4 {

    5 / / C r i an d o a l g un s o b j et o s6 Agencia a = ne w Agencia();7 Conta c = ne w Conta();

    40 www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    47/186

    41 ORIENTAO AOBJETOS

    89 / / C a r r eg a n do a l g un s d a d os

    1 a. numero = 178;11 c. saldo = 1.;12

    13 / / L i g an d o o s o b j et o s14 c. agencia = a;1516 S ys te m. Co ns ol e. W ri te Li ne ( c. ag en ci a. nu me ro ) ;17 S yst em . Cons ol e. Wri teL in e( c. saldo );18 }19 }

    Cdigo C# 3.32: TestaContaEAgencia.cs

    Compile e execute a classeTestaContaEAgencia.

    Exerccios Complementares

    7 Defina um vnculo entre os alunos e as turmas, criando na classeAlunoum 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 daclasseAluno.

    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 classeConta.

    1 void Deposita( double valor)2 {

    3 / / i m p l em e n t a o4 }

    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 41

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    48/186

    ORIENTAO AOBJETOS 42

    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 reservadavoid.

    Retorno Nome Lista de parmetros

    Corpo

    void Deposita ( double valor ) {

    this.saldo += valor;

    }

    Figura 3.13: Estrutura de um mtodo

    42 www.k19.com.br

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    49/186

    43 ORIENTAO AOBJETOS

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

    1 / / R e f er nc i a d e u m o b je t o

    2 Conta c = ne w Conta();34 / / C h a m an d o o m t o d o D e p os i t a ( )5 c . D ep o si t a ( 1 ) ;

    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 reservadathis.

    1 void Deposita( double valor)2 {3 this . s a l do + = v a l o r ;4 }

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

    O mtodoDeposita()no possui nenhum retorno lgico. Por isso, foi marcado comvoid. 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 disponvel

    das contas. Suponha tambm que o saldo disponvel igual a soma do saldo e do limite. Ento, essemtodo deve somar os atributossaldoelimitee 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 r e t ur n t h is . s a ld o + this .limite;4 }

    Cdigo C# 3.38: Mtodo com retorno double

    Ao chamar o mtodo ConsultaSaldoDisponivel()a resposta pode ser armazenada em uma

    varivel do tipodouble.

    1 Conta c = ne w Conta();2 c . D ep o si t a ( 1 ) ;34 / / A r ma z en a nd o a r e sp o st a d e u m m to d o e m u ma v a ri ve l5 double s a l d oD i s p on i v e l = c . C o n s u l ta S a l d oD i s p o ni v e l ( ) ;67 S ys t em . C o ns o le . W r it e Li n e (" S a l do D i s p on v el : " + s a l d oD i s p o ni v e l ) ;

    Cdigo C# 3.39: Armazenando a resposta de um mtodo

    Exerccios de Fixao

    www.facebook.com/k19treinamentos 43

  • 5/26/2018 K19 - K31 -C# e Orientao a Objetos

    50/186

    ORIENTAO AOBJETOS 44

    16 Acrescentealguns mtodos na classeContapara realiz