k19 - k31 -c# e orientação a objetos
Post on 16-Oct-2015
72 Views
Preview:
TRANSCRIPT
-
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
top related