- 6.01 Introdução
- 6.02 Módulos de Programa em C#
- 6.03 Métodos da Classe Math
- 6.04 Métodos
- 6.05 Definições de Métodos
- 6.06 Promoção de Argumentos
- 6.07 Espaço de Nomes do C#
- 6.08 Tipos de Valor e Tipos de Referência
- 6.09 Passagem de Argumentos: Passagem por valor versus passagem por referência
- 6.10 Geração de Número Aleatórios
- 6.11 Exemplo: Jogo de azar
- 6.12 Duração das variáveis
- 6.13 Regras de escopo
- 6.14 Recursividade
- 6.15 Exemplo Usando Recursividade: A série Fibonacci
- 6.16 Recursividade Versus Iteração
- 6.17 Sobrecarga de Métodos
A experiência tem mostrado que a melhor maneira de desenvolver e manter um programa
grande é construir a partir de pequenas partes simples, ou módulos.
Essa técnica é conhecida como dividir e conquistar.
Em C#, os módulos são chamados de métodos e classes.
Os programas C# são escritos por meio da combinação de novos métodos e classes
que o programador escreve com métodos e classes "previamente empacotados",
disponíveis na .NET Framework Class Library (FCL)
A FCL fornece uma rica coleção de classes e métodos ára efetuar cálculos matemáticos comuns, manipulação de string, manipulação de caractere, operações de entrada/saída, verificação de erro e muitas outras operações úteis.
Os métodos da classe Math permitem que o programador efetue certos cálculos matemáticos comuns.
Métodos da classe Math comumente usados.
| Método | Descrição | Exemplo |
|---|---|---|
| Abs(x) | Valor absoluto de x | Abs(23.7) é 23.7, Abs(0) é 0, Abs(-23.7) é 23.7 |
| Ceiling(x) | Arredonda x para o menor inteiro não menor do que x | Ceiling(9.2) é 10.0, Ceiling(-9.8) é -9.0 |
| Cos(x) | Co-seno trigonométrico de x (x em radianos) | Cos(0.0) é 1.0 |
| Exp(x) | Método exponencial | Exp(1.0) é aproximadamente 2.7122818284590451 |
| Floor(x) | Arredonda x para o maior inteiro não maior do que x | Floor(9.2) é 9.0, Floor(-9.8) é -10.0 |
| Log(x) | Logaritmo natural de x | Log(2.7182818284590451) é aproximadamente 1.0 |
| Max(x, y) | Maior valor de x e y | Max(2.3, 12.7) é 12.7, Max(-2.3, -12.7) é -2.3 |
| Min(x, y) | Menor valor de x e y | Min(2.3, 12.7) é 2.3, Min(-2.3, -12.7) é 12.7 |
| Pow(x, y) | X elevado à potência y | Pow(2.0, 7.0) é 128.0, Pow(9.0, .5) é 3.0 |
| Sin(x) | Seno trigonométrico de x | Sin(0.0) é 0.0 |
| Sqrt(x) | Raiz quadrada de n | Sqrt(900.0) é 30.0, Sqrt(9.0) é 3.0 |
| Tan(x) | Tangente trigonométrica de x | Tan(0.0) é 0.0 |
Os métodos permitem que o programador modularize os programas.
As variáveis declaradas nas definições de método são variáveis locais.
A maioria dos métodos tem uma lista de parâmetros que permite às chamadas a métodos e não são visíveis em nenhum outro método.
-
Fig. 6.03: SquareInt.cs
Demonstrando um método Square definido pelo programador. -
Fig. 6.04: MaximumValue.cs
Encontrando o máximo de três valores double.
Outro recurso importante das definições de métodos é a conversão de argumentos.
Esse processo é normalmente referido como conversão implícita, na qual uma cópia do valor da variável é convertida para um tipo diferente, sem uma conversão explícita.
A conversão explícita ocorre quando a conversão especifica que ela deve ocorrer.
Tais conversões podem ser feitas com a classe Convert, no espaço de nomes System.
o C# suporta conversões de alargamento e estreitamento.
- A conversão de alargamento ocorre quando um tipo é convertido para outros tipos, sem perda de dados.
- A conversão de estreitamento ocorrer quando dados podem ser perdidos por meio de uma conversão.
Por exemplo, O método Sqrt da classe Math pode ser chamado com um argumento integer, mesmo que o método seja definido na classe Math para receber um argumento double.
Console.WriteLine(Math.Sqrt((int) 4 ));O C# contém muitas classes predefinidas, agrupadas em espaço de nomes. Coletivamente, nos referimos a esse código preexistente como Framework Class Library.
O código real das classes está localizado em arquivos .dll chamados montagens.
Instruções using especificam os espaços de nomes que usamos em cada programa.
Espaços de nomes da Framework Class Library
| Espaço de nomes | Descrição |
|---|---|
| System | Contém classes e tipos de dados fundamentais |
| System.Data | Contem classes que formam o ADO .NET |
| System.Drawing | Contem classes usadas para desenho e elementos gráficos |
| System.IO | Contem classes para entrada e a saída de dados |
| System.Threading | Contem classes para múltiplas linhas de execução |
| System.Windows.Forms | Contem classes usadas para criar interfaces com o usuário gráficas |
| System.Xml | Contem classes usadas para processar dados XML |
Duas maneiras de passar argumentos para métodos em muitas linguagens de programação são passagem por valor e passagem pro referência.
Quando um argumento é passado por valor, o método chamado recebe uma cópia do valor do argumento.
Quando um argumento é passado usando passagem por referência, o chamador dá ao método a capacidade de acessar e modificar os dados originais do chamador diretamente.
Tipos de dados internos do C#
| Tipo | Tamanho em bits | Valores | Padrão |
|---|---|---|---|
| bool | 8 | true o false | |
| char | 16 | '\u0000' a '\uFFFF' | (conjunto de caracteres Unicode) |
| byte | 8 | 0 a 255 | (sem sinal) |
| sbyte | 8 | -128 a +127 | |
| short | 16 | -32.768 a +23.767 | |
| ushort | 16 | 0 a 65.535 | (sem sinal) |
| int | 32 | -2.147.483.648 a 2.147.483.647 | |
| uint | 32 | 0 a 4.294.967.295 | (sem sinal) |
| long | 64 | -9.223.372.036.854.775.808 a +9.223.372.036.854.755.807 | |
| ulong | 64 | 0 a 18.446.744.073.709.551.615 | (sem sinal) |
| decimal | 128 | 1.0 x 10^-28 a 7.9 x 10^28 | |
| float | 32 | ±1,5 x 10−45 para ±3,4 x 1038 | (ponto flutuante IEEE 754) |
| double | 64 | ±5.0 × 10−324 to ±1.7 × 10308 | (ponto flutuante IEEE 754) |
| object | |||
| string | (conjunto de caracteres Unicode) |
- Fig. 6.08: RefOutTest.cs
Demonstrando parâmetros ref e out.
Agora, teremos uma breve e, esperamos, interessante diversão com uma programação de aplicativo popular.
-
Fig. 6.09: RandomInt.cs
Gerando números inteiros aleatórios. -
Fig. 6.10: RollDie.cs
Usando a geração de números aleatórios para simular o lançamento de dados. -
Fig. 6.11: RollDie2.cs
lançamento de 12 dados com diagrama de frequência.
Um dos jogos de azar mais populares é um jogo de dados conhecido como craps, jogado em cassinos e becos de todo o mundo.
- Fig. 6.12: CrapsGame.cs
Simulando o jogo de craps.
Os atributos das variáveis incluem nome, tipo, tamanho e valor. Cada variável em um programa tem atributos adicionais, incluindo duração e escopo
A duração de uma variável é o período durante o qual ela existe na memória.
O escopo de uma variável é onde seu identificador pode ser referenciado em um programa.
As variáveis locais em um método têm duração automática.
O escopo de um identificador de uma variável, referência ou método é a parte do programa em que o identificador pode ser acessado.
Uma variável local ou referência declarada em um bloco pode ser usada apenas nesse bloco ou em blocos aninhados dentro desse bloco.
No Capítulo 9 veremos que os membros estáticos são uma exceção a essa regra.
- Fig. 6.13: Scoping.cs
Demonstrando o escopo de variáveis locais e de instância.
Para alguns problemas, é interessante ter um método chamando a si mesmo.
Um método recursivo é um método que chama a si mesmo, diretamente ou por meio de outro método.
- Fig. 6.15: FactorialTest.cs
Calculando fatoriais com recursividade.
Começa com 0 e 1 e tem a propriedade de que cada número de Fibonacci subsequente é a soma dos dois números de Fibonacci anteriores.
- Fig. 6.16: FibonacciTest.cs
Método de geração recursiva de números de Fibonacci.
(Pesquise na internet)
O C# permite que vários métodos de mesmo nome sejam definidos na mesma classe, desde que esses métodos tenham diferentes conjuntos de parâmetros.
-
Fig. 6.18: MethodOverload.cs
Usando métodos sobrecarregados -
Fig. 6.19: InvalidMethodOverload.cs
Demonstrando sobrecarga de métodos incorreta.