k19 k31 csharp e orientacao a objetos
Post on 14-Jul-2015
207 Views
Preview:
TRANSCRIPT
TREINAMENTOS
C# e Orientao a Objetos
C# e Orientao a Objetos
5 de janeiro de 2012
Sumrio Sobre a K19 Seguro Treinamento Termo de Uso Cursos 1 Introduo 1.1 Objetivo . . . . . . . . . . . . . . . . . . . . 1.2 Orientao a Objetos . . . . . . . . . . . . 1.3 Plataforma .NET . . . . . . . . . . . . . . . 1.4 Plataforma .NET VS Orientao a Objetos Lgica 2.1 O que um Programa? . . . . . . 2.2 Linguagem de Mquina . . . . . 2.3 Linguagem de Programao . . . 2.4 Compilador . . . . . . . . . . . . . 2.5 Mquinas Virtuais . . . . . . . . . 2.6 Exemplo de programa C# . . . . . 2.7 Mtodo Main - Ponto de Entrada 2.8 Exerccios de Fixao . . . . . . . 2.9 Variveis . . . . . . . . . . . . . . 2.10 Operadores . . . . . . . . . . . . . 2.11 IF-ELSE . . . . . . . . . . . . . . . 2.12 WHILE . . . . . . . . . . . . . . . . 2.13 FOR . . . . . . . . . . . . . . . . . 2.14 Exerccios de Fixao . . . . . . . 2.15 Exerccios Complementares . . . Orientao a Objetoswww.k19.com.br
i 1 2 3 4 5 5 5 6 6 7 7 7 8 8 8 11 12 12 13 16 19 19 20 20 23 25i
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
2
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
3
S UMRIO
ii
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19 3.20 3.21 4
Domnio e Aplicao . . . . . . . . . . . . . . . . . . . . . Objetos, Atributos e Mtodos . . . . . . . . . . . . . . . . Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Referncias . . . . . . . . . . . . . . . . . . . . . . . . . . . Manipulando Atributos . . . . . . . . . . . . . . . . . . . . Valores Padro . . . . . . . . . . . . . . . . . . . . . . . . . Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . Exerccios Complementares . . . . . . . . . . . . . . . . . Relacionamentos: Associao, Agregao e Composio Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . Exerccios Complementares . . . . . . . . . . . . . . . . . Mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . Exerccios Complementares . . . . . . . . . . . . . . . . . Sobrecarga (Overloading) . . . . . . . . . . . . . . . . . . Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . Construtores . . . . . . . . . . . . . . . . . . . . . . . . . . Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . Referncias como parmetro . . . . . . . . . . . . . . . . Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . Exerccios Complementares . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
25 26 28 31 32 33 34 37 37 39 41 41 43 44 45 46 47 50 53 53 54 55 55 56 56 57 58 58 58 60
Arrays 4.1 Criando um array . . . . . . . . . . . . 4.2 Modicando o contedo de um array 4.3 Acessando o contedo de um array . . 4.4 Percorrendo um Array . . . . . . . . . 4.5 foreach . . . . . . . . . . . . . . . . . . 4.6 Operaes . . . . . . . . . . . . . . . . 4.7 Exerccios de Fixao . . . . . . . . . . 4.8 Exerccios Complementares . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
5
IDE - Integrated Development Environment 61 5.1 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Atributos e Mtodos de Classe 6.1 Atributos Estticos . . . . . . 6.2 Mtodos Estticos . . . . . . 6.3 Exerccios de Fixao . . . . 6.4 Exerccios Complementares 67 67 68 69 71 73 73 74 74 75 75 75 76 77
6
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
7
Encapsulamento 7.1 Atributos Privados . . . . . . . . . . . . . . . . . . . 7.2 Mtodos Privados . . . . . . . . . . . . . . . . . . . 7.3 Mtodos Pblicos . . . . . . . . . . . . . . . . . . . 7.4 Implementao e Interface de Uso . . . . . . . . . 7.5 Por qu encapsular? . . . . . . . . . . . . . . . . . . 7.6 Celular - Escondendo a complexidade . . . . . . . 7.7 Carro - Evitando efeitos colateiras . . . . . . . . . 7.8 Mquinas de Porcarias - Aumentando o controle .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
ii
www.k19.com.br
iii
S UMRIO
7.9 7.10 7.11 7.12 8
Acessando ou modicando atributos Propriedades . . . . . . . . . . . . . . Exerccios de Fixao . . . . . . . . . Exerccios Complementares . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
78 79 80 82 83 83 83 84 85 87 87 88 90 90 93 95 95 96 97 97 98 100 101 101 102 103 105 107 107 107 108 109 110 111 115 115 115 115 116 116 117 118 119 121iii
Herana 8.1 Reutilizao de Cdigo . . . . . . . . . . 8.2 Uma classe para todos os servios . . . 8.3 Uma classe para cada servio . . . . . . 8.4 Uma classe genrica e vrias especcas 8.5 Preo Fixo . . . . . . . . . . . . . . . . . . 8.6 Reescrita de Mtodo . . . . . . . . . . . 8.7 Fixo + Especco . . . . . . . . . . . . . . 8.8 Construtores e Herana . . . . . . . . . . 8.9 Exerccios de Fixao . . . . . . . . . . . 8.10 Exerccios Complementares . . . . . . . Polimorsmo 9.1 Controle de Ponto . . . . . . . . . 9.2 Modelagem dos funcionrios . . 9.3 UM . . . . . . . . . . . . . . . . 9.4 Melhorando o controle de ponto 9.5 Exerccios de Fixao . . . . . . . 9.6 Exerccios Complementares . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
9
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
10 Classes Abstratas 10.1 Classes Abstratas . . . . . . . 10.2 Mtodos Abstratos . . . . . . 10.3 Exerccios de Fixao . . . . 10.4 Exerccios Complementares 11 Interfaces 11.1 Padronizao . . . . . 11.2 Contratos . . . . . . . 11.3 Exemplo . . . . . . . . 11.4 Polimorsmo . . . . . 11.5 Interface e Herana . 11.6 Exerccios de Fixao
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
12 Namespace 12.1 Organizao . . . . . . . . . . . . . . . . . . 12.2 O comando namespace . . . . . . . . . . . . 12.3 Namespaces Encadeados . . . . . . . . . . . 12.4 Namespace global . . . . . . . . . . . . . . . 12.5 Unqualied Name vs Fully Qualied Name 12.6 Using . . . . . . . . . . . . . . . . . . . . . . 12.7 Nveis de visibilidade . . . . . . . . . . . . . 12.8 Exerccios de Fixao . . . . . . . . . . . . . 13 Exceptionswww.k19.com.br
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
S UMRIO
iv
13.1 13.2 13.3 13.4 13.5
Exceptions e SystemExceptions Lanando erros . . . . . . . . . Capturando erros . . . . . . . . nally . . . . . . . . . . . . . . . Exerccios de Fixao . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
121 122 122 123 123 125 125 126 128 129
14 Object 14.1 Polimorsmo . . . . . 14.2 O mtodo ToString() . 14.3 O mtodo Equals() . . 14.4 Exerccios de Fixao
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
15 String 131 15.1 Imutabilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 15.2 Mtodos e Propriedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 15.3 Exerccios de Fixao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 16 Entrada e Sada 16.1 Leitura . . . . . . . . . . . . . 16.2 Escrita . . . . . . . . . . . . . 16.3 Exerccios de Fixao . . . . 16.4 Exerccios Complementares 17 Collections 17.1 Listas . . . . . . . . . 17.2 Exerccios de Fixao 17.3 Generics . . . . . . . . 17.4 Exerccios de Fixao 17.5 Conjuntos . . . . . . . 17.6 Colees . . . . . . . 17.7 Lao foreach . . . . . 17.8 Exerccios de Fixao 135 135 135 136 137 139 139 142 143 145 146 147 147 148 149 149 150 150 151 152 155
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
18 Threads 18.1 Denindo Tarefas . . . . . . . . . . . 18.2 Executando Tarefas . . . . . . . . . . 18.3 Exerccios de Fixao . . . . . . . . . 18.4 Controlando a Execuo das Tarefas 18.5 Exerccios de Fixao . . . . . . . . . A Respostas
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
iv
www.k19.com.br
1
S UMRIO
Sobre a K19A K19 uma empresa especializada na capacitao de desenvolvedores de software. Sua equipe composta por prossionais formados em Cincia da Computao pela Universidade de So Paulo (USP) e que possuem vasta experincia em treinamento de prossionais para rea de TI. O principal objetivo da K19 oferecer treinamentos de mxima qualidade que relacionados s principais tecnologias utilizadas pelas empresas. Atravs desses treinamentos, seus alunos se tornam capacitados para atuar no mercado de trabalho. Visando a mxima qualidade, a K19 mantm as suas apostilas em constante renovao e melhoria, oferece instalaes fsicas apropriadas para o ensino e seus instrutores esto sempre atualizados didtica e tecnicamente.
www.k19.com.br
1
S UMRIO
2
Seguro TreinamentoNa K19 o aluno faz o curso quantas vezes quiser! Comprometida com o aprendizado e com a satisfao dos seus alunos, a K19 a nica que possui o Seguro Treinamento. Ao contratar um curso, o aluno poder refaz-lo quantas vezes desejar mediante a disponibilidade de vagas e pagamento da franquia do Seguro Treinamento. As vagas no preenchidas at um dia antes do incio de uma turma da K19 sero destinadas ao alunos que desejam utilizar o Seguro Treinamento. O valor da franquia para utilizar o Seguro Treinamento 10% do valor total do curso.
2
www.k19.com.br
3
S UMRIO
Termo de UsoTermo de UsoTodo o contedo desta apostila propriedade da K19 Treinamentos. A apostila pode ser utilizada livremente para estudo pessoal . Alm disso, este material didtico pode ser utilizado como material de apoio em cursos de ensino superior desde que a instituio correspondente seja reconhecida pelo MEC (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 sem o prvio consentimento formal, por escrito, da K19 Treinamentos. O uso indevido est sujeito s medidas legais cabveis.
www.k19.com.br
3
S UMRIO
4
TR
S TO EN AM EIN TREINAMENTOS TR EIN AM EN TO S
Conhea os nossos cursosK01- 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
www.k19.com.br/cursos
4
www.k19.com.br
CAPTULOIGLUFigura 1.1: Moradias
I NTRODUO
1
ObjetivoO objetivo fundamental dos treinamentos da K19 transmitir os conhecimentos necessrios para que os seus alunos possam atuar no mercado de trabalho na rea de desenvolvimento de software. As plataformas .NET e Java so as mais utilizadas no desenvolvimento de software. Para utilizar os recursos oferecidos por essas plataformas de forma eciente, necessrio possuir conhecimento slido em orientao a objetos.
Orientao a ObjetosUm modelo de programao ou paradigma de 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-los com padres arquiteturais utilizados por diferentes povos para construo de casas. As caractersticas ambientais denem quais tcnicas devem ser adotadas para a construo das moradias. Analogamente, devemos escolher o modelo de programao mais adequado s necessidades da aplicao que queremos desenvolver.M A D K P B 0O K X E 8 T 80 E 1 B Y K 19
CABANA DE NDIO
CASA OCIDENTAL
O modelo de programao mais adotado no desenvolvimento de sistemas corporativos o modelo orientado a objetos. Esse modelo utilizado com o intuito de obter alguns benefcios especcos. Normalmente, o principal benefcio desejado facilitar a manuteno das aplicaes.www.k19.com.br
5
I NTRODUO
6
Em geral, os conceitos do modelo de programao orientado a objetos diminuem a complexidade 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 .NETA plataforma .NET ser objeto de estudo desse treinamento. Mas, devemos salientar que os conceitos 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 aplicados no desenvolvimento de uma aplicao. O ambiente de execuo .NET permite que uma aplicao .NET seja executada em diferentes verses do Sistema Operacional Windows.
PLATAFORMA .NETLINGUAGEM DE PROGRAMAO ORIENTADA A OBJETOS AMBIENTE DE EXECUO
Figura 1.2: Plataforma .NET
Plataforma .NET VS Orientao a ObjetosDo ponto de vista do aprendizado, interessante tentar denir o que mais importante, a plataforma .NET ou a orientao a objetos. Consideramos que a orientao a objetos mais importante pois ela aplicada em muitas outras linguagens.
6
www.k19.com.br
CAPTULOFigura 2.1: Cdigo de Mquina.
L GICA
2
O que um Programa?Um dos maiores benefcios da utilizao de computadores a automatizao de processos realizados manualmente por pessoas. Vejamos um exemplo prtico: Quando as apuraes dos votos das eleies no Brasil eram realizadas manualmente, o tempo para obter os resultados era alto e havia alta probabilidade de uma falha humana. Esse processo foi automatizado e hoje realizado por computadores. O tempo para obter os resultados e a chance de ocorrer uma falha humana diminuram drasticamente. Basicamente, os computadores so capazes de executar instrues matemticas mais rapidamente do que o homem. Essa simples capacidade permite que eles resolvam problemas complexos de maneira mais eciente. Porm, eles no possuem a inteligncia necessria para denir quais instrues devem ser executadas para resolver uma determinada tarefa. Por outro lado, os seres humano possuem essa inteligncia. Dessa forma, uma pessoa precisa denir um roteiro com a sequncia de comandos necessrios para realizar uma determinada tarefa e depois passar para um computador executar esse roteiro. Formalmente, esses roteiros so chamados de programas. Os programas devem ser colocados em arquivos no disco rgido dos computadores. Assim, quando as tarefas precisam ser realizadas, os computadores podem ler esses arquivos para saber quais instrues devem ser executadas.
Linguagem de MquinaOs computadores s sabem ler instrues escritas em linguagem de mquina. Uma instruo escrita 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
Teoricamente, as pessoas poderiam escrever os programas diretamente em linguagem de mquina. Na prtica, ningum faz isso pois uma tarefa muito complicada e demorada.www.k19.com.br
7
L GICA
8
Um arquivo contendo as instrues de um programa em Linguagem de Mquina chamado de executvel.
Linguagem de ProgramaoComo vimos anteriormente, escrever um programa em linguagem de mquina totalmente invivel para uma pessoa. Para resolver esse problema, surgiram as linguagens de programao, que tentam se aproximar das linguagens humanas. Conra um trecho de um cdigo escrito com a linguagem de programao C#:1 2 3 4 5 6 7 class OlaMundo { static void Main () { System . Console . WriteLine ( " Ol Mundo " ) ; } }Cdigo C# 2.1: OlaMundo.cs
Por enquanto voc pode no entender muito do que est escrito, porm ca bem claro que um programa escrito dessa forma ca bem mais fcil de ser lido. Um arquivo contendo as instrues de um programa em linguagem de programao chamado de arquivo fonte.
CompiladorPor um lado, os computadores processam apenas instrues em linguagem de mquina. Por outro lado, as pessoas denem as instrues em linguagem de programao. Dessa forma, necessrio traduzir o cdigo escrito em linguagem de programao por uma pessoa para um cdigo em linguagem de mquina para que um computador possa processar. Essa traduo realizada por programas especiais chamados compiladores.while(true){ if(x < 1){ return 0; } return 1; }
CDIGO FONTE
PROCESSADOR
NO EXECUTA
while(true){ if(x < 1){ return 0; } return 1; }
CDIGO FONTE
COMPILADOR
CDIGO DE MQUINA
PROCESSADOR
EXECUTA
Figura 2.2: Processo de compilao e execuo de um programa.
Mquinas Virtuais8www.k19.com.br
9
L GICA
Assim como as pessoas podem se comunicar atravs de lnguas diferentes, os computadores podem se comunicar atravs de linguagens de mquina diferentes. A linguagem de mquina de um computador denida pela arquitetura do processador desse computador. H diversas arquiteturas diferentes (Intel, ARM, PowerPC, etc) e cada uma delas dene uma linguagem de mquina diferente. Em outras palavras, um programa pode no executar em computadores com processadores de arquiteturas diferentes. Os computadores so controlados por um sistema operacional que oferece diversas bibliotecas necessrias para o desenvolvimento das aplicaes que podem ser executadas atravs dele. Sistemas operacionais diferentes (Windows, Linux, Mac OS X, etc) possuem bibliotecas diferentes. Em outras palavras, 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 executada por um computador, devemos considerar a arquitetura do processador e o sistema operacional desse computador. Algumas bibliotecas especcas de sistema operacional so chamadas diretamente pelas instrues em linguagem de programao. Dessa forma, geralmente, o cdigo fonte est amarrado a uma plataforma (sistema operacional + arquitetura de processador).PROGRAMA 1 PLATAFORMA 1 EXECUTA
PROGRAMA 2
PLATAFORMA 2
EXECUTA
PROGRAMA 2
PLATAFORMA 3
NO EXECUTA
Figura 2.3: Ilustrao mostrando que cada plataforma necessita de um executvel especco.
Uma empresa que deseja ter a sua aplicao disponvel para diversos sistemas operacionais (Windows, Linux, Mac OS X, etc), e diversas arquiteturas de processador (Intel, ARM, PowerPC, etc), ter que desenvolver verses diferentes do cdigo fonte para cada plataforma (sistema operacional + arquitetura de processador). Isso pode causar um impacto nanceiro nessa empresa que inviabiliza o negcio.www.k19.com.br
9
L GICA
10
Para tentar resolver o problema do desenvolvimento de aplicaes multiplataforma, surgiu o conceito de mquina virtual. Uma mquina virtual funciona como uma camada a mais entre o cdigo compilado e a plataforma. Quando compilamos um cdigo fonte, estamos criando um executvel que a mquina virtual saber interpretar e ela quem dever traduzir as instrues do seu programa para a plataforma.MQUINA VIRTUAL 1 PLATAFORMA 1 EXECUTA
PROGRAMA
MQUINA VIRTUAL 2
PLATAFORMA 2
EXECUTA
MQUINA VIRTUAL 3
PLATAFORMA 3
EXECUTA
Figura 2.4: Ilustrao do funcionamento da mquina virtual.
Tudo parece estar perfeito agora. Porm, olhando atentamente a gura acima, percebemos que existe a necessidade de uma mquina virtual para cada plataforma. Algum poderia dizer que, de fato, o problema no foi resolvido, apenas mudou de lugar. A diferena que implementar a mquina virtual no tarefa do programador que desenvolve as aplicaes que sero executadas nela. A implementao da mquina virtual responsabilidade de terceiros, que geralmente so empresas bem conceituadas ou projetos de cdigo aberto que envolvem 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 diminuio de performance, j que a prpria mquina virtual consome recursos do computador. Alm disso, as instrues do programa so processadas primeiro pela mquina virtual e depois pelo computador. Por outro lado, as mquinas virtuais podem aplicar otimizaes que aumentam a performance da execuo de um programa. Inclusive, essas otimizaes podem considerar informaes geradas durante a execuo. So exemplos de informaes geradas durante a execuo: a quantidade de uso da memria RAM e do processador do computador, a quantidade de acessos ao disco rgido, a quantidade de chamadas de rede e a frequncia de execuo de um determinado trecho do programa. Algumas mquinas virtuais identicam os trechos do programa que esto sendo mais chamados10www.k19.com.br
11
L GICA
em um determinado momento da execuo para traduzi-los para a linguagem de mquina do computador. A partir da, esses trechos podem ser executados diretamente no processador sem passar pela mquina virtual. Essa anlise da mquina virtual realizada durante toda a execuo. Com essas otimizaes que consideram vrias informaes geradas durante a execuo, um programa executado com mquina virtual pode at ser mais eciente em alguns casos do que um programa executado diretamente no sistema operacional.
Mais SobreGeralmente, as mquinas virtuais utilizam uma estratgia de compilao chamada Just-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 a utilizao 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 e execuo. Utilizaremos a linguagem C#, que amplamente adotada nas empresas. Observe o cdigo do exemplo de um programa escrito em C# que imprime uma mensagem na tela:1 2 3 4 5 6 7 class OlaMundo { static void Main () { System . Console . WriteLine ( " Ol Mundo " ) ; } }Cdigo C# 2.2: OlaMundo.cs
O cdigo fonte C# deve ser colocado em arquivos com a extenso .cs. Agora, no necessrio entender todo o cdigo do exemplo. Basta saber que toda aplicao C# precisa ter um mtodo especial chamado Main para executar. O prximo passo compilar o cdigo fonte, para gerar um executvel que possa ser processado pela mquina virtual do .NET. O compilador padro da plataforma .NET (csc) pode ser utilizado para compilar esse arquivo. O compilador pode ser executado pelo terminal.C :\ Users \ K19 \ Documents > csc OlaMundo . cs Microsoft ( R ) Visual C # 2 1 Compiler version 4. .3 319.1 Copyright ( C ) Microsoft Corporation . All rights reserved .
Terminal 2.1: Compilando
O cdigo gerado pelo compilador .NET armazenado em arquivos com a extenso .exe. No exemplo, o programa gerado pelo compilador colocado em um arquivo chamado OlaMundo.exe e ele pode ser executado atravs de um terminal.C :\ Users \ K19 \ Documents > OlaMundo . exe Ol Mundo
Terminal 2.2: Executando
www.k19.com.br
11
L GICA
12
ImportantePara compilar e executar um programa escrito em C#, necessrio que voc tenha instalado e congurado em seu computador uma mquina virtual .NET. Verses mais recentes do Windows j possuem uma mquina virtual .NET instalada.
Mtodo Main - Ponto de EntradaPara um programa C# executar, necessrio denir um mtodo especial para ser o ponto de entrada do programa, ou seja, para ser o primeiro mtodo a ser chamado quando o programa for executado. O mtodo Main precisa ser static e seu tipo de retorno pode ser void ou int. Ele tambm pode 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 2 3 4 static static static static void Main () int Main () void Main ( string [] args ) int Main ( string [] args )Cdigo C# 2.3: Variaes da Assinatura do Mtodo Main
Os parmetros do mtodo Main so passados pela linha de comando e podem ser manipulados dentro do programa. O cdigo abaixo imprime cada parmetro recebido em uma linha diferente.1 2 3 4 5 6 7 8 9 1 class Programa { static void Main ( string [] args ) { for ( int i = ; i < args . Length ; i ++) { System . Console . WriteLine ( args [ i ]) ; } } }Cdigo C# 2.4: Imprimindo os parmetros da linha de comando
Os parmetros devem ser passados imediatamente aps o nome do programa. A compilao e execuo do programa mostrada na gura abaixo.C :\ Users \ K19 \ Documents > csc Programa . cs Microsoft ( R ) Visual C # 2 1 Compiler version 4. .3 319.1 Copyright ( C ) Microsoft Corporation . All rights reserved . C :\ Users \ K19 \ Documents > Programa . exe " Rafael Cosentino " " Marcelo Martins " Rafael Cosentino Marcelo Martins
Terminal 2.3: Imprimindo os parmetros da linha de comando
Exerccios de Fixao12www.k19.com.br
13
L GICA
1 Abra um terminal e crie uma pasta com o seu nome. Voc deve salvar os seus exerccios nessa pasta.C :\ Users \ K19 \ Documents > md Marcelo
Terminal 2.4: Criando a pasta de exerccios
Dentro da sua pasta de exerccios, crie uma pasta para os arquivos desenvolvidos nesse captulo chamada logica.2C :\ Users \ K19 \ Documents > cd Marcelo C :\ Users \ K19 \ Documents \ Marcelo > md logica
Terminal 2.5: Criando a pasta dos exerccios desse captulo
Crie um programa que imprima uma mensagem na tela. Adicione o seguinte arquivo na pasta logica.3
1 2 3 4 5 6 7
class OlaMundo { static void Main () { System . Console . WriteLine ( " Ol Mundo " ) ; } }Cdigo C# 2.5: OlaMundo.cs
Compile e execute a classe OlaMundo.
VariveisBasicamente, o que um programa faz manipular dados. Em geral, esses dados so armazenados em variveis localizadas na memria RAM do computador. Uma varivel pode guardar dados de vrios 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 ser manipulada pelo programa.numeroDaConta numeroDaConta
numeroDaConta = 4823 MEMRIA RAM
4823
MEMRIA RAM
Figura 2.5: Processo de atribuio do valor numrico 4823 varivel numeroDaConta.
DeclaraoNa linguagem de programao C#, as variveis devem ser declaradas para que possam ser utilizadas. A declarao de uma varivel envolve denir um nome nico (identicador) dentro de umwww.k19.com.br
13
L GICA
14
escopo e um tipo de valor. As variveis so acessadas pelos nomes e armazenam valores compatveis com o seu tipo.1 2 3 4 5 // Uma varivel do tipo int chamada numeroDaConta . int numeroDaConta ; // Uma varivel do tipo double chamada precoDoProduto . double precoDoProduto ;Cdigo C# 2.6: Declarao de Variveis
Mais SobreUma linguagem de programao dita estaticamente tipada quando ela exige que os tipos das variveis sejam denidos antes da compilao. A linguagem C# uma linguagem estaticamente tipada. Uma linguagem de programao dita fortemente tipada quando ela exige que os valores armazenados em uma varivel sejam compatveis com o tipo da varivel. A linguagem C# uma linguagem fortemente tipada.
Mais SobreEm geral, as linguagens de programao possuem convenes para denir os nomes das 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 camel case com a primeira letra minscula. Esse padro tambm conhecido como lower camel case. Veja alguns exemplos:
nomeDoCliente numeroDeAprovadosA conveno de nomes da linguagem C# pode ser consultada na seguinte url: http://msdn.
microsoft.com/en-us/library/ms229
2.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 programao.1 2 3 4 5 6 7 8 9 1 11 // Declarao com Inicializao int numero = 1 ; // Uso da varivel System . Console . WriteLine ( numero ) ; // Outra Declarao com Inicializao double preco = 137.6; // Uso da varivel System . Console . WriteLine ( preco ) ;Cdigo C# 2.7: Declarando em qualquer linha de um bloco.
14
www.k19.com.br
15
L GICA
No podemos declarar duas variveis com o mesmo nome em um nico bloco ou escopo pois ocorrer um erro de compilao.1 2 3 4 5 // Declarao int numero = 1 ; // Erro de Compilao int numero = 1 ;Cdigo C# 2.8: Duas vriaveis com o mesmo nome no mesmo bloco.
InicializaoToda varivel deve ser inicializada antes de ser utilizada pela primeira vez. Se isso no for realizado, ocorrer um erro de compilao. A inicializao realizada atravs do operador de atribuio =. Esse operador guarda um valor em uma varivel.1 2 3 4 5 6 7 8 9 1 11 12 // Declaraes int numero ; double preco ; // Inicializao numero = 1 ; // Uso Correto System . Console . WriteLine ( numero ) ; // Erro de compilao System . Console . WriteLine ( preco ) ;Cdigo C# 2.9: Inicializao
Tipos PrimitivosA linguagem C# dene um conjunto de tipos bsicos de dados que so chamados tipos primitivos. A tabela abaixo mostra os oito tipos primitivos da linguagem C# e os valores compatveis. Tipo sbyte byte short ushort int uint long ulong oat Descrio Valor inteiro entre -128 e 127 (inclusivo) Valor inteiro entre 0 e 255 (inclusivo) Valor inteiro entre -32.768 e 32.767 (inclusivo) Valor inteiro entre 0 e 65.535 (inclusivo) Valor inteiro entre -2.147.483.648 e 2.147.483.647 (inclusivo) Valor inteiro entre 0 e 4.294.967.295 (inclusivo) Valor inteiro entre -9.223.372.036.854.775.808 e 9.223.372.036.854.775.807 (inclusivo) Valor inteiro entre 0 e 18.446.744.073.709.551.615 (inclusivo) Valor com ponto utuante entre 1, 40129846432481707 1045 e 3, 40282346638528860 1038 (positivo ou negativo)www.k19.com.br
Tamanho (peso) 1 byte 1 byte 2 bytes 2 bytes 4 bytes 4 bytes 8 bytes 8 bytes 4 bytes
15
L GICA
16
Tipo double decimal bool char
Descrio Valor com ponto utuante entre 4, 94065645841246544 10324 e 1, 79769313486231570 10308 (positivo ou negativo) Valor com ponto utuante entre 1, 0 1028 e 7, 9 1028 (positivo ou negativo) true ou false Um nico caractere Unicode de 16 bits. Valor inteiro e positivo entre 0 (ou \u0000) e 65.535 (ou \uffff)Tabela 2.1: Tipos primitivos de dados em C#.
Tamanho (peso) 8 bytes 16 bytes 1 bit 2 bytes
ImportanteNenhum tipo primitivo da linguagem C# permite o armazenamento de texto. O tipo primitivo char armazena apenas um caractere. Quando necessrio armazenar um texto, devemos utilizar o tipo string. Contudo, importante salientar que o tipo string no um tipo primitivo.
OperadoresPara manipular os valores das variveis de um programa, devemos utilizar os operadores oferecidos pela linguagem de programao adotada. A linguagem C# possui diversos operadores e os principais so categorizados da seguinte forma: Aritmtico (+, -, *, /, %) Atribuio (=, +=, -=, *=, /=, %=) Relacional (==, !=, =) Lgico (&&, ||)
AritmticoOs operadores aritmticos funcionam de forma muito semelhante aos operadores na matemtica. Os operadores aritmticos so: Soma + Subtrao Multiplicao * Diviso / Mdulo %1 2 3 4 int int int int umMaisUm = 1 + 1; // tresVezesDois = 3 * 2; // quatroDivididoPor2 = 4 / 2; // seisModuloCinco = 6 % 5; // umMaisUm = 2 tresVezesDois = 6 quatroDivididoPor2 = 2 seisModuloCinco = 1
16
www.k19.com.br
175 6 7 8 int x = x = x = x x x x = + / 7; 1 * 2; // x = 14 4; // x = 1 (6 - 2 + (3*5) /(16 -1) ) ; // x = 2Cdigo C# 2.10: Exemplo de uso dos operadores aritmticos.
L GICA
ImportanteO mdulo de um nmero x , na matemtica, o valor numrico de x desconsiderando o 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 por outro. No exemplo acima, o resto da diviso de 6 por 5 igual a 1. Alm disso, lemos a expresso 6%5 da seguinte forma: seis mdulo cinco.
ImportanteAs operaes aritmticas em C# obedecem as mesmas regras da matemtica com relao 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.
AtribuioNas sees anteriores, j vimos um dos operadores de atribuio, o operador = (igual). Os operadores de atribuio so: Simples = Incremental += Decremental -= Multiplicativa *= Divisria /= Modular %=1 2 3 4 5 6 int valor = 1; valor += 2; valor -= 1; valor *= 6; valor /= 3; valor %= 3; // // // // // // valor valor valor valor valor valor = = = = = = 1 3 2 12 4 1
Cdigo C# 2.11: Exemplo de uso dos operadores de atribuio.
As instrues acima poderiam ser escritas de outra forma:1 2 3 int valor = 1; valor = valor + 2; valor = valor - 1; // valor = 1 // valor = 3 // valor = 2
www.k19.com.br
17
L GICA4 5 6 valor = valor * 6; valor = valor / 3; valor = valor % 3; // valor = 12 // valor = 4 // valor = 1
18
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 para as operaes que utilizam os operadores aritmticos.
RelacionalMuitas vezes precisamos determinar a relao entre uma varivel ou valor e outra varivel ou valor. Nessas situaes, utilizamos os operadores relacionais. As operaes realizadas com os operadores relacionais devolvem valores do tipo primitivo bool. Os operadores relacionais so: Igualdade == Diferena != Menor < Menor ou igual Maior ou igual >=1 2 3 4 5 6 7 8 int valor = 2; bool t = false ; t = ( valor == 2) ; t = ( valor != 2) ; t = ( valor < 2) ; t = ( valor 1) ; t = ( valor >= 1) ;
// // // // // //
t t t t t t
= = = = = =
true false false true true true
Cdigo C# 2.13: Exemplo de uso dos operadores relacionais em C#.
LgicoA linguagem C# permite vericar duas ou mais condies atravs de operadores lgicos. Os operadores lgicos devolvem valores do tipo primitivo bool. Os operadores lgicos so: E lgico && OU lgico ||1 2 3 4 5 6 7 int valor = 3 ; bool teste = false ; teste = valor < 4 && teste = valor < 4 && teste = valor > 3 || teste = valor > 3 || teste = valor < 5 &&
valor valor valor valor valor
> 2 ; > 3 ; > 2 ; < 2 ; == 3 ;
// // // // //
teste teste teste teste teste
= = = = =
true false true false true
Cdigo C# 2.14: Exemplo de uso dos operadores lgicos em C#.
18
www.k19.com.br
19
L GICA
IF-ELSEO comportamento de uma aplicao pode ser inuenciado por valores denidos pelos usurios. Por exemplo, considere um sistema de cadastro de produtos. Se um usurio tenta adicionar um produto com preo negativo, a aplicao no deve cadastrar esse produto. Caso contrrio, se o preo no for negativo, o cadastro pode ser realizado normalmente. Outro exemplo, quando o pagamento de um boleto realizado em uma agncia bancria, o sistema do banco deve vericar a data de vencimento do boleto para aplicar ou no uma multa por atraso. Para vericar uma determinada condio e decidir qual bloco de instrues deve ser executado, devemos aplicar o comando if.1 2 3 4 5 6 7 8 if ( preco < ) { System . Console . WriteLine ( " O preo do produto no pode ser negativo " ) ; } else { System . Console . WriteLine ( " Produto cadastrado com sucesso " ) ; }Cdigo C# 2.15: Comando if
O comando if permite que valores booleanos sejam testados. Se o valor passado como parmetro para o comando if for true, o bloco do if executado. Caso contrrio, o bloco do else executado. O parmetro passado para o comando if deve ser um valor booleano, caso contrrio o cdigo no compila. O comando else e o seu bloco so opcionais.
WHILEEm alguns casos, necessrio repetir um trecho de cdigo diversas vezes. Suponha que seja necessrio imprimir 10 vezes na tela a mensagem: Bom Dia. Isso poderia ser realizado colocando 10 linhas iguais a essa no cdigo fonte:1 System . Console . WriteLine ( " Bom Dia " ) ;Cdigo C# 2.16: Bom Dia
Se ao invs de 10 vezes fosse necessrio imprimir 100 vezes, j seriam 100 linhas iguais no cdigo fonte. muito trabalhoso utilizar essa abordagem para esse problema. Atravs do comando while, possvel denir quantas vezes um determinado trecho de cdigo deve ser executado pelo computador.1 2 3 4 int contador = ; )
while ( contador < 1 {
www.k19.com.br
19
L GICA5 6 7 System . Console . WriteLine ( " Bom Dia " ) ; contador ++; }Cdigo C# 2.17: Comando while
20
A varivel contador indica o nmero de vezes que a mensagem Bom Dia foi impressa na tela. O operador ++ incrementa a varivel contador a cada rodada. O parmetro do comando while tem que ser um valor booleano. Caso contrrio, ocorrer um erro de compilao.
FORO comando for anlogo ao while. A diferena entre esses dois comandos que o for recebe trs argumentos.1 2 3 for ( int contador = ; contador < 1 ; contador ++) { System . Console . WriteLine ( " Bom Dia " ) ; }Cdigo C# 2.18: Comando for
Exerccios de Fixao4
Imprima na tela o seu nome 100 vezes. Adicione na pasta logica o seguinte arquivo.class ImprimeNome { static void Main () { for ( int contador = ; contador < 1 ; contador ++) { System . Console . WriteLine ( " Marcelo Martins " ) ; } } }Cdigo C# 2.19: ImprimeNome.cs
1 2 3 4 5 6 7 8 9 1
Compile e execute a classe ImprimeNome.C :\ Users \ K19 \ Marcelo \ logica > csc ImprimeNome . cs Microsoft ( R ) Visual C # 2 1 Compiler version 4. .3 319.1 Copyright ( C ) Microsoft Corporation . All rights reserved . C :\ Users \ K19 \ Marcelo \ logica > ImprimeNome . exe Marcelo Martins Marcelo Martins Marcelo Martins ...
Terminal 2.6: Imprimindo 100 vezes um nome
5
Imprima na tela os nmeros de 1 at 100. Adicione na pasta logica o seguinte arquivo.class ImprimeAte1
1
20
www.k19.com.br
212 3 4 5 6 7 8 9 1 { static void Main () { for ( int contador = 1; contador csc ImprimeAte1 . cs Microsoft ( R ) Visual C # 2 1 Compiler version 4. .3 319.1 Copyright ( C ) Microsoft Corporation . All rights reserved . C :\ Users \ K19 \ Documents \ Marcelo \ logica > ImprimeAte1 1 2... . exe
Terminal 2.7: Imprimindo de 1 at 100
Faa um programa que percorra todos os nmero de 1 at 100. Para os nmeros mpares, deve ser impresso um *, e para os nmeros pares, deve ser impresso dois **. Veja o exemplo abaixo:6
* ** * ** * **Adicione o seguinte arquivo na pasta logica.1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 class ImprimePadrao1 { static void Main () { for ( int contador = 1; contador csc ImprimePadrao1 . cs Microsoft ( R ) Visual C # 2 1 Compiler version 4. .3 319.1
www.k19.com.br
21
L GICACopyright ( C ) Microsoft Corporation . All rights reserved . C :\ Users \ K19 \ Documents \ Marcelo \ logica > ImprimePadrao1 . exe * ** * **...
22
Terminal 2.8: Padro 1
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:7
1 2 3 PI 5 6 7 PI
Adicione o seguinte arquivo na pasta logica.1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 class ImprimePadrao2 { static void Main () { for ( int contador = 1; contador csc ImprimePadrao2 . cs Microsoft ( R ) Visual C # 2 1 Compiler version 4. .3 319.1 Copyright ( C ) Microsoft Corporation . All rights reserved . C :\ Users \ K19 \ Documents \ Marcelo \ logica > ImprimePadrao2 . exe 1 2 3 PI 5 6 7 PI ...
Terminal 2.9: Padro 2
22
www.k19.com.br
23
L GICA
Exerccios Complementares1
Crie um programa que imprima na tela um tringulo de *. Veja o exemplo abaixo:
* ** *** **** *****2
Crie um programa que imprima na tela vrios tringulos de *. Observe o padro abaixo.
* ** *** **** * ** *** ****Os nmeros de Fibonacci so uma sequncia de nmeros denida recursivamente. O primeiro elemento da sequncia 0 e o segundo 1. Os outros elementos so calculados somando os dois antecessores.3
, 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. Use seus conhecimentos para criar um programa que mostre um menu de atalho para os 5 padres que acabamos de fazer. Exemplo:4K1C :\ Users \ K19 \ Documents \ Marcelo \ logica > csc GeradorDePadroes . cs Microsoft ( R ) Visual C # 2 1 Compiler version 4. .3 319.1 Copyright ( C ) Microsoft Corporation . All rights reserved . C :\ Users \ K19 \ Documents \ Marcelo \ logica > GeradorDePadroes . exe Gerador de Padres
Escolha a opo desejada : 1- Padro 2- Padro 3- Padro 4- Padro 5- Padro - Sair
Terminal 2.13: Menu
www.k19.com.br
23
L GICA
24
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:1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23 24 25 26 27 28 29 3 31 32 33 34 35 36 37 38 39 4 41 42 // Vamos aprender nos proximos capitulos para que serve o using . using System ; using System . IO ; class GeradorDePadroes { static void Main () { int opc = 1; // Temos que atribuir o valor 1 na varivel , para poder entrar no lao de repetio while ( opc != ) { // Coloque o codigo do menu aqui . // Vamos aprender mais pra frente que esses so os comandos para receber e guardar algum valor da tela . TextReader textReader = Console . In ; string valorTela = textReader . ReadLine () ; opc = Convert . ToInt32 ( valorTela ) ; if ( opc == 1) { // Cdigo para o } else if ( opc == 2) { // Cdigo para o } else if ( opc == 3) { // Cdigo para o } else if ( opc == 4) { // Cdigo para o } else if ( opc == 5) { // Cdigo para o } } } }Cdigo C# 2.26: GeradorDePadroes.cs
Padro 1
Padro 2
Padro 3
Padro 4
Padro 5
24
www.k19.com.br
CAPTULOCONTA DO JOS FUNCIONRIO MARCELO CLIENTE JOO FUNCIONRIO RAFAEL
O RIENTAO A O BJETOS
3
Domnio e AplicaoUm domnio composto pelas entidades, informaes e processos relacionados a um determinado contexto. Uma aplicao pode ser desenvolvida para automatizar ou tornar factvel as tarefas de um domnio. Portanto, uma aplicao basicamente o reexo de um domnio. Para exemplicar, suponha que estamos interessados em desenvolver uma aplicao para facilitar as tarefas do cotidiano de um banco. Podemos identicar clientes, funcionrios, agncias e contas como entidades desse domnio. Assim como podemos identicar as informaes e os processos relacionados a essas entidades.
FUNCIONRIO JONAS CLIENTE JOS
CONTA DA MARIA
CLIENTE MARIA
CONTA DO JOO
DOMNIO BANCRIOFigura 3.1: Domnio bancrio
www.k19.com.br
25
O RIENTAO A O BJETOS
26
Mais SobreA identicao dos elementos de um domnio uma tarefa difcil, pois depende fortemente 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 com o domnio e no possuem conhecimentos tcnicos para desenvolver uma aplicao. Desenvolvedores de software buscam constantemente mecanismos para tornar mais eciente o entendimento dos domnios para os quais eles devem desenvolver aplicaes.
Objetos, Atributos e MtodosAs entidades identicadas no domnio devem ser representadas de alguma forma dentro da aplicao correspondente. Nas aplicaes orientadas a objetos, as entidades so representadas por objetos. Uma aplicao orientada a objetos composta por objetos. Em geral, um objeto representa uma entidade do domnio. Para exemplicar, suponha que no domnio de um determinado banco exista um cliente chamado Joo. Dentro de uma aplicao orientada a objetos correspondente a esse domnio, deve existir um objeto para representar esse cliente. Suponha que algumas informaes do cliente Joo como nome, data de nascimento e sexo so importantes para o banco. J que esses dados so relevantes para o domnio, o objeto que representa esse cliente deve possuir essas informaes. Esses dados so armazenados nos atributos do objeto que 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 denidas nos mtodos do objeto. Os mtodos tambm so utilizados para possibilitar interaes entre os objetos de uma aplicao. 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 do cliente. As tarefas que um objeto pode realizar so denidas pelos seus mtodos. Um objeto composto por atributos e mtodos.26www.k19.com.br
27
O RIENTAO A O BJETOS
Funcionario nome = Jonas Hirata codigo = 3 salario = 3000 Funcionario nome = Marcelo Rezende codigo = 2 salario = 2000 TiraFerias AumentaSalario MudaHorario
Funcionario FUNCIONRIO JONAS FUNCIONRIO MARCELO FUNCIONRIO RAFAEL nome = Rafael Cosentino codigo = 1 salario = 1000 TiraFerias AumentaSalario MudaHorario
TiraFerias AumentaSalario MudaHorario
Conta saldo = 8000 numero = 3
CONTA DA MARIA CONTA DO JOS CONTA DO JOO Conta saldo = 2000 numero = 1 Deposita Saca GeraExtrato
Conta saldo = 4000 numero = 2 Deposita Saca GeraExtrato
Deposita Saca GeraExtrato
Cliente nome = Maria do Bairro codigo = 3 Cliente nome = Jos do Caixo codigo = 2 MudaEndereco FazEmprestimo
CLIENTE MARIA CLIENTE JOS CLIENTE JOO
Cliente nome = Joo do Pulo codigo = 1 MudaEndereco FazEmprestimo
MudaEndereco FazEmprestimo
DOMNIO BANCRIO
APLICAO
Figura 3.2: Mapeamento Domnio-Aplicao
www.k19.com.br
27
O RIENTAO A O BJETOS
28
Mais SobreEm geral, no adequado utilizar o objeto que representa um determinado cliente para representar outro cliente do banco, pois os dados dos clientes podem ser diferentes. Dessa forma, para cada cliente do banco, deve existir um objeto dentro do sistema para represent-lo.
Mais SobreOs objetos no representam apenas coisas concretas como os clientes do banco. Eles tambm devem ser utilizados para representar coisas abstratas como uma conta de um cliente ou um servio que o banco oferea.
ClassesAntes de um objeto ser criado, devemos denir quais sero os seus atributos e mtodos. Essa denio realizada atravs de uma classe elaborada por um programador. A partir de uma classe, podemos construir objetos na memria do computador que executa a nossa aplicao. Podemos representar uma classe atravs de diagramas UML. O diagrama UML de uma classe composto pelo nome da mesma e pelos atributos e mtodos que ela dene. Todos os objetos criados a partir da classe Conta tero os atributos e mtodos mostrados no diagrama UML. Os valores dos atributos de dois objetos criados a partir da classe Conta podem 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 um espao 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 algum terreno vazio. Um prdio construdo a partir de uma planta criada por um engenheiro ou arquiteto. Para criar um objeto, necessrio algo semelhante a uma planta para que sejam desenhados os atributos e mtodos que o objeto deve ter. Em orientao a objetos, a planta de um objeto o que chamamos de classe.M A D K P B 0O K X E 8 T 80 E 1 B Y K 19
28
www.k19.com.br
29
O RIENTAO A O BJETOS
Uma classe funciona como uma receita para criar objetos. Inclusive, vrios objetos podem ser criados a partir de uma nica classe. Assim como vrias casas ou prdios poderiam ser construdos a partir de uma nica planta; ou vrios bolos poderiam ser preparados a partir de uma nica receita; ou vrios carros poderiam ser construdos a partir de um nico projeto.
Figura 3.4: Diversas casas construdas a partir da mesma planta
Figura 3.5: Diversos bolos preparados a partir da mesma receita
Figura 3.6: Diversos carros construdos a partir do mesmo projeto
Basicamente, as diferenas entre dois objetos criados a partir da classe Conta so os valores dos seus atributos. Assim como duas casas construdas a partir da mesma planta podem possuir caractersticas diferentes. Por exemplo, a cor das paredes.
Figura 3.7: Diversas casas com caractersticas diferentes
www.k19.com.br
29
O RIENTAO A O BJETOS
30
Classes em C#O conceito de classe apresentado anteriormente genrico e pode ser aplicado em diversas linguagens de programao. Mostraremos como a classe Conta poderia ser escrita utilizando a linguagem C#. Inicialmente, discutiremos apenas sobre os atributos. Os mtodos sero abordados posteriormente.1 2 3 4 5 6 class Conta { public double saldo ; public double limite ; public int numero ; }Cdigo C# 3.1: Conta.cs
A classe C# Conta declarada utilizando a palavra reservada class. 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 denidos no cdigo. Os atributos saldo e limite so do tipo double, que permite armazenar nmeros com casas decimais, e o atributo numero do tipo int, que permite armazenar nmeros inteiros. O modicador public adicionado em cada atributo para que eles possam ser acessados a partir de qualquer ponto do cdigo. Discutiremos sobre esse e outros modicadores de visibilidade em captulos posteriores.
ImportantePor conveno, os nomes das classes na linguagem C# devem seguir o padro pascal case tambm conhecido como upper camel case.
Criando objetos em C#Aps denir a classe Conta, podemos criar objetos a partir dela. Esses objetos devem ser alocados na 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 importantes oferecidos pela mquina virtual. Do ponto de vista da aplicao, basta utilizar um comando especial para criar objetos e a mquina virtual se encarrega do resto. O comando para criar objetos o new.1 2 3 4 5 6 7 class TestaConta { static void Main () { new Conta () ; } }Cdigo C# 3.2: TestaConta.cs
A linha com o comando new poderia ser repetida cada vez que desejssemos criar (instanciar) um objeto da classe Conta. A classe TestaConta serve apenas para colocarmos o mtodo Main, que o ponto de partida da aplicao.30www.k19.com.br
311 2 3 4 5 6 7 8 9 1 class TestaConta { static void Main () { // criando trs objetos new Conta () ; new Conta () ; new Conta () ; } }Cdigo C# 3.3: TestaConta.cs
O RIENTAO A O BJETOS
AnalogiaChamar o comando new passando uma classe C# como se estivssemos contratando uma 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 virtual se encarrega de construir o objeto na memria do computador.M A D K P B 0O K X E 8 T 80 E 1 B Y K 19
CASA
PROGRAMADOR
PEDREIRO
PLANTAFigura 3.8: Construindo casas
RefernciasTodo objeto possui uma referncia. A referncia de um objeto a nica maneira de acessar os seus atributos e mtodos. Dessa forma, devemos guardar as referncias dos objetos que desejamos utilizar.
AnalogiaA princpio, podemos comparar a referncia de um objeto com o endereo de memria desse objeto. De fato, essa comparao simplica o aprendizado. Contudo, o conceito de referncia mais amplo. Uma referncia o elemento que permite que um determinado objeto seja acessado.M A D K P B 0O K X E 8 T 80 E 1 B Y K 19
www.k19.com.br
31
O RIENTAO A O BJETOS
32
Uma referncia est para um objeto assim como um controle remoto est para um aparelho de TV. Atravs do controle remoto de uma TV voc pode aumentar o volume ou trocar de canal. Analogamente, podemos controlar um objeto atravs da referncia do mesmo.
1 4 7-/--
2 5 3 6 9CH
8 0
Figura 3.9: Controle remoto
Referncias em C#Ao utilizar o comando new, um objeto alocado em algum lugar da memria. Para que possamos acessar esse objeto, precisamos de sua referncia. O comando new devolve a referncia do objeto que foi criado. Para guardar as referncias devolvidas pelo comando new, devemos utilizar variveis no primitivas.1 Conta referecia = new Conta () ;Cdigo C# 3.4: Criando um objeto e guardando a referncia.
No cdigo C# acima, a varivel referencia receber a referncia do objeto criado pelo comando
new. Essa varivel do tipo Conta. Isso signica que ela s pode armazenar referncias de objetos do tipo Conta.
Manipulando AtributosPodemos alterar ou acessar os valores guardados nos atributos de um objeto se tivermos a referncia a esse objeto. Os atributos so acessados pelo nome. No caso especco da linguagem C#, a sintaxe para acessar um atributo utiliza o operador ".".1 2 3 4 5 6 7 8 9 Conta referecia = new Conta () ; referecia . saldo = 1 . ; referecia . limite = 5 . ; referecia . numero = 1; System . Console . WriteLine ( referecia . saldo ) ; System . Console . WriteLine ( referecia . limite ) ; System . Console . WriteLine ( referecia . numero ) ;
32
www.k19.com.br
33
O RIENTAO A O BJETOS
Cdigo C# 3.5: Alterando e acessando os atributos de um objeto.
No cdigo acima, o atributo saldo recebe o valor 1000.0. O atributo limite recebe o valor 500 e o numero recebe o valor 1. Depois, os valores so impressos na tela atravs do comando System.Console.WriteLine.
Valores PadroPoderamos instanciar um objeto e utilizar seus atributos sem inicializ-los explicitamente, pois os atributos so inicializados com valores padro. Os atributos de tipos numricos so inicializados com 0, os atributos do tipo boolean so inicializados com false e os demais atributos com null (referncia vazia).1 2 3 4 class Conta { public double limite ; }Cdigo C# 3.6: Conta.cs
1 2 3 4 5 6 7 8 9 1
class TestaConta { static void Main () { Conta conta = new Conta () ; // imprime System . Console . WriteLine ( conta . limite ) ; } }Cdigo C# 3.7: TestaConta.cs
A inicializao dos atributos com os valores padro ocorre na instanciao, ou seja, quando o comando 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 na declarao. Por exemplo, suponha que o limite padro das contas de um banco seja R$ 500. Nesse caso, seria interessante denir esse valor como padro para o atributo limite.1 2 3 4 class Conta { public double limite = 5 }
;
Cdigo C# 3.8: Conta.cs
1 2 3 4 5 6 7 8 9
class TestaConta { static void Main () { Conta conta = new Conta () ; // imprime 5 System . Console . WriteLine ( conta . limite ) ; }
www.k19.com.br
33
O RIENTAO A O BJETOS1 }Cdigo C# 3.9: TestaConta.cs
34
Exerccios de Fixao1 Dentro da sua pasta de exerccios, crie uma pasta chamada orientacao-a-objetos para os arquivos 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 denir os objetos que representaro os clientes de um banco. Essa classe deve declarar dois atributos: um para os nomes e outro para os cdigos dos clientes. Adicione o seguinte arquivo na pasta orientacao-a-objetos.
1 2 3 4 5
class Cliente { public string nome ; public int codigo ; }Cdigo C# 3.10: Cliente.cs
3 Faa um teste criando dois objetos da classe Cliente. Adicione o seguinte arquivo na pasta orientacao-a-objetos.
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19
class TestaCliente { static void Main () { Cliente c1 = new Cliente () ; c1 . nome = " Rafael Cosentino " ; c1 . codigo = 1; Cliente c2 = new Cliente () ; c2 . nome = " Jonas Hirata " ; c2 . codigo = 2; System . Console . WriteLine ( c1 . nome ) ; System . Console . WriteLine ( c1 . codigo ) ; System . Console . WriteLine ( c2 . nome ) ; System . Console . WriteLine ( c2 . codigo ) ; } }Cdigo C# 3.11: TestaCliente.cs
Compile e execute a classe TestaCliente.4 Os bancos oferecem aos clientes a possibilidade de obter um carto de crdito que pode ser utilizados para fazer compras. Um carto de crdito possui um nmero e uma data de validade. Crie uma classe para modelar os objetos que representaro os cartes de crdito. Adicione o seguinte arquivo na pasta orientacao-a-objetos.
34
www.k19.com.br
351 2 3 4 5 class CartaoDeCredito { public int numero ; public string dataDeValidade ; }Cdigo C# 3.12: CartaoDeCredito.cs
O RIENTAO A O BJETOS
5 Faa um teste criando dois objetos da classe CartaoDeCredito. Altere e imprima os atributos desses objetos. Adicione o seguinte arquivo na pasta orientacao-a-objetos.
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19
class TestaCartaoDeCredito { static void Main () { CartaoDeCredito cdc1 = new CartaoDeCredito () ; cdc1 . numero = 111111; cdc1 . dataDeValidade = " 1/ 1/2 13 " ; CartaoDeCredito cdc2 = new CartaoDeCredito () ; cdc2 . numero = 222222; cdc2 . dataDeValidade = " 1/ 1/2 14 " ; System . Console . WriteLine ( cdc1 . numero ) ; System . Console . WriteLine ( cdc1 . dataDeValidade ) ; System . Console . WriteLine ( cdc2 . numero ) ; System . Console . WriteLine ( cdc2 . dataDeValidade ) ; } }Cdigo C# 3.13: TestaCartaoDeCredito.cs
Compile e execute a classe TestaCartaoDeCredito. As agncias do banco possuem nmero. Crie uma classe para denir os objetos que representaro as agncias.6
1 2 3 4
class Agencia { public int numero ; }Cdigo C# 3.14: Agencia.cs
7 Faa um teste criando dois objetos da classe Agencia. Altere e imprima os atributos desses objetos. Adicione o seguinte arquivo na pasta orientacao-a-objetos.
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15
class TestaAgencia { static void Main () { Agencia a1 = new Agencia () ; a1 . numero = 1234; Agencia a2 = new Agencia () ; a2 . numero = 5678; System . Console . WriteLine ( a1 . numero ) ; System . Console . WriteLine ( a2 . numero ) ; } }
www.k19.com.br
35
O RIENTAO A O BJETOS
36
Cdigo C# 3.15: TestaAgencia.cs
Compile e execute a classe TestaAgencia. As contas do banco possuem nmero, saldo e limite. Crie uma classe para denir os objetos que representaro as contas.8
1 2 3 4 5 6
class Conta { public int numero ; public double saldo ; public double limite ; }Cdigo C# 3.16: Conta.cs
9 Faa um teste criando dois objetos da classe Conta. Altere e imprima os atributos desses objetos. Adicione o seguinte arquivo na pasta orientacao-a-objetos.
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23
class TestaConta { static void Main () { Conta c1 = new Conta () ; c1 . numero = 1234; c1 . saldo = 1 ; c1 . limite = 5 ; Conta c2 = new Conta () ; c2 . numero = 5678; c2 . saldo = 2 ; c2 . limite = 25 ; System . Console . WriteLine ( c1 . numero ) ; System . Console . WriteLine ( c1 . saldo ) ; System . Console . WriteLine ( c1 . limite ) ; System . Console . WriteLine ( c2 . numero ) ; System . Console . WriteLine ( c2 . saldo ) ; System . Console . WriteLine ( c2 . limite ) ; } }Cdigo C# 3.17: TestaConta.cs
Compile e execute a classe TestaConta.10
Faa um teste que imprima os atributos de um objeto da classe Conta logo aps a sua criao.class TestaValoresPadrao { static void Main () { Conta c = new Conta () ; System . Console . WriteLine ( c . numero ) ; System . Console . WriteLine ( c . saldo ) ; System . Console . WriteLine ( c . limite ) ; } }Cdigo C# 3.18: TestaValoresPadrao.cs
1 2 3 4 5 6 7 8 9 1 11
36
www.k19.com.br
37
O RIENTAO A O BJETOS
Compile e execute a classe TestaValoresPadrao. Altere a classe Conta para que todos os objetos criados a partir dessa classe possuam R$ 100 de limite inicial.1 2 3 4 5 6 7 8 class Conta { public int numero ; public double saldo ; // Adicione a linha abaixo public double limite = 1 ; }11
Cdigo C# 3.19: Conta.cs
Compile e execute a classe TestaValoresPadrao.
Exerccios ComplementaresImplemente uma classe chamada Aluno na pasta orientacao-a-objetos para denir os objetos que representaro os alunos de uma escola. Essa classe deve declarar trs atributos: o primeiro para o nome, o segundo para o RG e o terceiro para a data de nascimento dos alunos.1 2 Faa uma classe chamada TestaAluno e crie dois objetos da classe Aluno atribuindo valores a eles. A classe tambm deve mostrar na tela as informaes desses objetos.
Em uma escola, alm dos alunos temos os funcionrios, que tambm precisam ser representados em nossa aplicao. Ento implemente outra classe na pasta orientacao-a-objetos chamada Funcionario que contenha trs atributos: o primeiro para o nome e o segundo para o cargo o terceiro cargo dos funcionrios3 4 Faa uma classe chamada TestaFuncionario e crie dois objetos da classe Funcionario atribuindo 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 dentro da aplicao. Implemente na pasta orientacao-a-objetos um classe chamada Turma que contenha quatro atributos: o primeiro para o perodo, o segundo para denir a srie, o terceiro para sigla e o quarto para o tipo de ensino.
Faa uma classe chamada TestaTurma para criar dois objetos da classe Turma. Adicione informaes a eles e depois mostre essas informaes na tela.6
Relacionamentos: Associao, Agregao e ComposioTodo cliente do banco pode adquirir um carto de crdito. Suponha que um cliente adquira um carto de crdito. Dentro do sistema do banco, deve existir um objeto que represente o cliente e outro 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.www.k19.com.br
37
O RIENTAO A O BJETOS
38
DEBIT
DEBIT
DEBIT
Figura 3.10: Clientes e cartes
Duas classes deveriam ser criadas: uma para denir os atributos e mtodos dos clientes e outra para os atributos e mtodos dos cartes de crdito. Para expressar o relacionamento entre cliente e carto de crdito, podemos adicionar um atributo do tipo Cliente na classe CartaoDeCredito.1 2 3 4 class Cliente { public string nome ; }Cdigo C# 3.26: Cliente.cs
1 2 3 4 5 6
class CartaoDeCredito { public int numero ; public string dataDeValidade ; public Cliente cliente ; }Cdigo C# 3.27: CartaoDeCredito.cs
Esse tipo de relacionamento chamado de Agregao. H uma notao grca na linguagem UML para representar uma agregao. Veja o diagrama abaixo.
Figura 3.11: Agregao entre clientes e cartes de crdito.
No relacionamento entre carto de crdito e cliente, um carto de crdito s pode se relacionar com 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 diagrama acima, o caractere * colocado ao lado da classe CartaoDeCredito. O relacionamento entre um objeto da classe Cliente e um objeto da classe CartaoDeCredito s concretizado quando a referncia do objeto da classe Cliente armazenada no atributo cliente do objeto da classe CartaoDeCredito. Depois de relacionados, podemos acessar, indiretamente, os atributos do cliente atravs da referncia do objeto da classe CartaoDeCredito.38www.k19.com.br
391 2 3 4 5 6 7 8 9 // Criando um objeto de cada classe CartaoDeCredito cdc = new CartaoDeCredito () ; Cliente c = new Cliente () ; // Ligando os objetos cdc . cliente = c ; // Acessando o nome do cliente cdc . cliente . nome = " Rafael Cosentino " ;Cdigo C# 3.28: Concretizando uma agregaco
O RIENTAO A O BJETOS
CARTOnumero = 123 dataValidade = 01/2012 cliente = null
CARTOnumero = 123 dataValidade = 01/2012 cliente = null
CLIENTEnome = Jonas Hirata cpf = 123.456.789-0
CARTOnumero = 123 dataValidade = 01/2012 cliente
CLIENTEnome = Jonas Hirata cpf = 123.456.789-0
Figura 3.12: Conectando um cliente e um carto
Exerccios de FixaoDena um vnculo entre os objetos que representam os clientes e os objetos que representam os cartes de crdito. Para isso, voc deve alterar a classe CartaoDeCredito.1 2 3 4 5 6 7 8 9 class CartaoDeCredito { public int numero ; public string dataDeValidade ; // Adicione a linha abaixo public Cliente cliente ; }Cdigo C# 3.29: CartaoDeCredito.cs 12
13
Teste o relacionamento entre clientes e cartes de crdito.
www.k19.com.br
39
O RIENTAO A O BJETOS1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 class TestaClienteECartao { static void Main () { // Criando alguns objetos Cliente c = new Cliente () ; CartaoDeCredito cdc = new CartaoDeCredito () ; // Carregando alguns dados c . nome = " Rafael Cosentino " ; cdc . numero = 111111; // Ligando os objetos cdc . cliente = c ; System . Console . WriteLine ( cdc . numero ) ; System . Console . WriteLine ( cdc . cliente . nome ) ; } }Cdigo C# 3.30: TestaClienteECartao.cs
40
Compile e execute a classe TestaClienteECartao.14 Dena um vnculo entre os objetos que representam as agncias e os objetos que representam os contas. Para isso, voc deve alterar a classe Conta.
1 2 3 4 5 6 7 8 9
class Conta { public int numero ; public double saldo ; public double limite = 1 // Adicione a linha abaixo public Agencia agencia ; }
;
Cdigo C# 3.31: Conta.cs
15
Teste o relacionamento entre contas e agncias.class TestaContaEAgencia { static void Main () { // Criando alguns objetos Agencia a = new Agencia () ; Conta c = new Conta () ; // Carregando alguns dados a . numero = 178; c . saldo = 1 . ; // Ligando os objetos c . agencia = a ; System . Console . WriteLine ( c . agencia . numero ) ; System . Console . WriteLine ( c . saldo ) ; } }Cdigo C# 3.32: TestaContaEAgencia.cs
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19
Compile e execute a classe TestaContaEAgencia.40www.k19.com.br
41
O RIENTAO A O BJETOS
Exerccios Complementares7
Dena um vnculo entre os alunos e as turmas, criando na classe Aluno um atributo do tipo
Turma.8 Teste o relacionamento entre os alunos e as turmas, criando um objeto de cada classe e atribuindo valores a eles. Exiba na tela os valores que esto nos atributos da turma atravs do objeto da classe Aluno.
MtodosNo banco, possvel realizar diversas operaes em uma conta: depsito, saque, transferncia, consultas e etc. Essas operaes podem modicar ou apenas acessar os valores dos atributos dos objetos que representam as contas. Essas operaes so realizadas em mtodos denidos na prpria classe Conta. Por exemplo, para realizar a operao de depsito, podemos acrescentar o seguinte mtodo na classe Conta.1 2 3 4 void Deposita ( double valor ) { // implementao }
Cdigo C# 3.35: Denindo um mtodo
Podemos dividir um mtodo em quatro partes:
Nome: utilizado para chamar o mtodo. Na linguagem C#, uma boa prtica denir os nomes dos mtodos utilizando a conveno Camel Case com a primeira letra maiscula.
Lista de Parmetros: Dene os valores que o mtodo deve receber. Mtodos que no devem receber nenhum valor possuem a lista de parmetros vazia.
Corpo: Dene o que acontecer quando o mtodo for chamado.
Retorno: A resposta que ser devolvida ao nal do processamento do mtodo. Quando um mtodo no devolve nenhuma resposta, ele deve ser marcado com a palavra reservada void.www.k19.com.br
41
O RIENTAO A O BJETOS
42
Retorno
Nome
Lista de parmetros
void }
Deposita ( double valor )
{
this.saldo += valor;
Corpo
Figura 3.13: Estrutura de um mtodo
Para realizar um depsito, devemos chamar o mtodo Deposita() atravs da referncia do objeto que representa a conta que ter o dinheiro creditado.42www.k19.com.br
431 2 3 4 5 // Referncia de um objeto Conta c = new Conta () ; // Chamando o mtodo Deposita () c . Deposita (1 );Cdigo C# 3.36: Chamando o mtodo Deposita()
O RIENTAO A O BJETOS
Normalmente, os mtodos acessam ou alteram os valores armazenados nos atributos dos objetos. Por exemplo, na execuo do mtodo Deposita(), necessrio alterar o valor do atributo saldo do objeto que foi escolhido para realizar a operao. Dentro de um mtodo, para acessar os atributos do objeto que est processando o mtodo, devemos utilizar a palavra reservada this.1 2 3 4 void Deposita ( double valor ) { this . saldo += valor ; }Cdigo C# 3.37: Utilizando o this para acessar e/ou modicar um atributo
O mtodo Deposita() no possui nenhum retorno lgico. Por isso, foi marcado com void. Mas, para outros mtodos, pode ser necessrio denir um tipo de retorno especco. 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, esse mtodo deve somar os atributos saldo e limite e devolver o resultado. Por outro lado, esse mtodo no deve receber nenhum valor, pois todas as informaes necessrias para realizar a operao esto nos atributos dos objetos que representam as contas.1 2 3 4 double ConsultaSaldoDisponivel () { return this . saldo + this . limite ; }Cdigo C# 3.38: Mtodo com retorno double
Ao chamar o mtodo ConsultaSaldoDisponivel() a resposta pode ser armazenada em uma varivel do tipo double.1 2 3 4 5 6 7 Conta c = new Conta () ; c . Deposita (1 ); // Armazenando a resposta de um mtodo em uma varivel double saldoDisponivel = c . ConsultaSaldoDisponivel () ; System . Console . WriteLine ( " Saldo Disponvel : " + this . saldoDisponivel ) ;Cdigo C# 3.39: Armazenando a resposta de um mtodo
Exerccios de FixaoAcrescente alguns mtodos na classe Conta para realizar as operaes de deposito, saque, impresso de extrato e consulta do saldo disponvel.www.k19.com.br16
43
O RIENTAO A O BJETOS1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16 17 18 19 2 21 22 23 24 25 26 27 28 29 class Conta { public int numero ; public double saldo ; public double limite = 1 public Agencia agencia ;
44
;
// Adicione os mtodos abaixo public void Deposita ( double valor ) { this . saldo += valor ; } public void Saca ( double valor ) { this . saldo -= valor ; } public void ImprimeExtrato () { System . Console . WriteLine ( " SALDO : " + this . saldo ) ; } public double ConsultaSaldoDisponivel () { return this . saldo + this . limite ; } }
Cdigo C# 3.40: Conta.cs
17
Teste os mtodos da classe Conta.class TestaMetodosConta { static void Main () { Conta c = new Conta () ; c . Deposita (1 ); c . ImprimeExtrato () ; c . Saca (1 ) ; c . ImprimeExtrato () ; double saldoDisponivel = c . ConsultaSaldoDisponivel () ; System . Console . WriteLine ( " SALDO DISPONVEL : " + saldoDisponivel ) ; } }
1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 16
Cdigo C# 3.41: TestaMetodosConta.cs
Compile e execute a classe TestaMetodosConta.
Exerccios Complementares9 Sabendo que qualquer empresa possui funcionrios, crie uma classe chamada Funcionario para represent-los. Acrescente os atributos nome e salario a essa classe. Alm disso, voc deve criar dois
44
www.k19.com.br
45
O RIENTAO A O BJETOS
mtodos: um para aumentar o salrio e outro para consultar os dados dos funcionrios. Crie uma classe chamada TestaFuncionario para testar os mtodos de um objeto da classe Funcionario.10
Sobrecarga (Overloading)Os clientes dos bancos costumam consultar periodicamente informaes relativas s suas contas. Geralmente, essas informaes so obtidas atravs de extratos. No sistema do banco, os extratos podem ser gerados por mtodos da classe Conta.1 2 3 4 5 6 7 8 9 1 class Conta { public double saldo ; public double limite ; public void ImprimeExtrato ( int dias ) { // extrato } }Cdigo C# 3.44: Conta.cs
O mtodo ImprimeExtrato() recebe a quantidade de dias que deve ser considerada para gerar o extrato da conta. Por exemplo, se esse mtodo receber o valor 30 ento ele deve gerar um extrato com as movimentaes dos ltimos 30 dias. Em geral, extratos dos ltimos 15 dias atendem as necessidades dos clientes. Dessa forma, poderamos acrescentar um mtodo na classe Conta para gerar extratos com essa quantidade xa de dias.1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 class Conta { public double saldo ; public double limite ; public void ImprimeExtrato () { // extrato dos ltimos 15 dias } public void ImprimeExtrato ( int dias ) { // extrato } }Cdigo C# 3.45: Conta.cs
O primeiro mtodo no recebe parmetros pois ele utilizar uma quantidade de dias padro denida pelo banco para gerar os extratos (15 dias). O segundo recebe um valor inteiro como parmetro e deve considerar essa quantidade de dias para gerar os extratos. Os dois mtodos possuem o mesmo nome e lista de parmetros diferentes. Quando dois ou maiswww.k19.com.br
45
O RIENTAO A O BJETOS
46
mtodos so denidos na mesma classe com o mesmo nome, dizemos que houve uma sobrecarga de mtodos. Uma sobrecarga de mtodos s vlida se as listas de parmetros dos mtodos so diferentes entre si. No caso dos dois mtodos que geram extratos, poderamos evitar repetio de cdigo fazendo um mtodo chamar o outro.1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 class Conta { public double saldo ; public double limite ; public void ImprimeExtrato ( int dias ) { // extrato } public void ImprimeExtrato () { this . ImprimeExtrato (15) ; } }Cdigo C# 3.46: Conta.cs
Exerccios de FixaoCrie uma classe chamada Gerente para denir os objetos que representaro os gerentes do banco. Dena dois mtodos de aumento salarial nessa classe. O primeiro deve aumentar o salrio com uma taxa xa de 10%. O segundo deve aumentar o salrio com uma taxa varivel.1 2 3 4 5 6 7 8 9 1 11 12 13 14 15 class Gerente { public String nome ; public double salario ; public void AumentaSalario () { this . AumentaSalario ( .1) ; } public void AumentaSalario ( double taxa ) { this . salario += this . salario * taxa ; } }Cdigo C# 3.47: Gerente.cs 18
19
Teste os mtodos de aumento salarial denidos na classe Gerente.class TestaGerente { static void Main () { Gerente g = new Gerente () ; g . salario =1 ; System . Console . WriteLine ( " Salrio : " + g . salario ) ;
1 2 3 4 5 6 7 8 9
46
www.k19.com.br
471 11 12 13 14 15 16 17 18 19 2 System . Console . WriteLine ( " Aumentando o salrio em 1 % " ) ; g . AumentaSalario () ; System . Console . WriteLine ( " Salrio : " + g . salario ) ; System . Console . WriteLine ( " Aumentando o salrio em 3 % " ) ; g . AumentaSalario ( .3) ; System . Console . WriteLine ( " Salrio : " + g . salario ) ; } }Cdigo C# 3.48: TestaGerente.cs
O RIENTAO A O BJETOS
Compile e execute a classe TestaGerente.
ConstrutoresNo domnio de um banco, todo carto de crdito deve possuir um nmero. Toda agncia deve possuir um nmero. Toda conta deve estar associada a uma agncia. Aps criar um objeto para representar um carto de crdito, poderamos denir um valor para o atributo numero. De maneira semelhante, podemos denir um nmero para um objeto da classe Agencia e uma agncia para um objeto da classe Conta.1 2 CartaoDeCredito cdc = new CartaoDeCredito () ; cdc . numero = 12345;Cdigo C# 3.49: Denindo um nmero para um carto de crdito
1 2
Agencia a = new Agencia () ; a . numero = 11111;Cdigo C# 3.50: Denindo um nmero para uma agncia
1 2
Conta c = new Conta () ; c . agencia = a ;Cdigo C# 3.51: Denindo uma agncia para uma conta
Denir os valores dos atributos obrigatrios de um objeto logo aps a criao dele resolveria as restries do sistema do banco. Porm, nada garante que todos os desenvolvedores sempre lembrem de inicializar esses valores. Para no correr esse risco, podemos utilizar construtores. Um construtor permite que um determinado trecho de cdigo seja executado toda vez que um objeto criado, ou seja, toda vez que o operador new chamado. Assim como os mtodos, os construtores podem receber parmetros. Contudo, diferentemente dos mtodos, os construtores no devolvem resposta. Em C#, um construtor deve ter o mesmo nome da classe na qual ele foi denido.1 2 3 4 5 class CartaoDeCredito { public int numero ; public CartaoDeCredito ( int numero )
www.k19.com.br
47
O RIENTAO A O BJETOS6 7 8 9 { this . numero = numero ; } }Cdigo C# 3.52: CartaoDeCredito.cs
48
1 2 3 4 5 6 7 8 9
class Agencia { public int numero ; public Agencia ( int numero ) { this . numero = numero ; } }Cdigo C# 3.53: Agencia.cs
1 2 3 4 5 6 7 8 9
class Conta { Agencia agencia ; public Conta ( Agencia agencia ) { this . agencia = agencia ; } }Cdigo C# 3.54: Conta.cs
Na criao de um objeto com o comando new, os argumentos passados devem ser compatveis com a lista de parmetros de algum construtor denido na classe que est sendo instanciada. Caso contrrio, um erro de compilao ocorrer para avisar o desenvolvedor dos valores obrigatrios que devem ser passados para criar um objeto.1 2 3 4 5 6 // Passando corretamente os parmetros para os construtores CartaoDeCredito cdc = new CartaoDeCredito (1111) ; Agencia a = new Agencia (1234) ; Conta c = new Conta ( a ) ;Cdigo C# 3.55: Construtores
1 2 3 4 5 6 7 8
// ERRO DE COMPILAO CartaoDeCredito cdc = new CartaoDeCredito () ; // ERRO DE COMPILAO Agencia a = new Agencia () ; // ERRO DE COMPILAO Conta c = new Conta () ;Cdigo C# 3.56: Construtores
Construtor PadroToda vez que um objeto criado, um construtor da classe correspondente deve ser chamado. Mesmo quando nenhum construtor for denido explicitamente, h um construtor padro que ser48www.k19.com.br
49
O RIENTAO A O BJETOS
inserido pelo prprio compilador. O construtor padro no recebe parmetros e ser inserido sempre que o desenvolvedor no denir pelo menos um construtor explicitamente. Portanto, para instanciar uma classe que no possui construtores denidos no cdigo fonte, devemos utilizar o construtor padro, j que este inserido automaticamente pelo compilador.1 2 3 4 class Conta { }Cdigo C# 3.57: Conta.cs
1 2
// Chamando o construtor padro Conta c = new Conta () ;Cdigo C# 3.58: Utilizando o construtor padro
Lembrando que o construtor padro s ser inserido pelo compilador se nenhum construtor for denido no cdigo fonte. Dessa forma, se voc adicionar um construtor com parmetros ento no poder utilizar o comando new sem passar argumentos, pois um erro de compilao ocorrer.1 2 3 4 5 6 7 8 9 class Agencia { public int numero ; public Agencia ( int numero ) { this . numero = numero ; } }Cdigo C# 3.59: Agencia.cs
1 2
// ERRO DE COMPILAO Agencia a = new Agencia () ;Cdigo C# 3.60: Chamando um construtor sem argumentos
Sobrecarga de ConstrutoresO conceito de sobrecarga de mtodos pode ser aplicado para construtores. Dessa forma, podemos denir diversos construtores na mesma classe.1 2 3 4 5 6 7 8 9 1 11 12 13 14 class Pessoa { public string rg ; public int cpf ; public Pessoa ( string rg ) { this . rg = rg ; } public Pessoa ( int cpf ) { this . cpf = cpf ; }
www.k19.com.br
49
O RIENTAO A O BJETOS15 }Cdigo C# 3.61: Pessoa.cs
50
Quando dois construtores so denidos, h duas opes no momento de utilizar o comando new.1 2
top related