Académique Documents
Professionnel Documents
Culture Documents
Apresentao da disciplina:
Vamos estudar na disciplina de Desenvolvimento orientado a Objetos I a integrao das fases de anlise e
implementao, conforme o paradigma orientado a objetos.
Objetivos:
Histrico
Linguagens OO
Conceitos e aplicao:
o
Classe
Objeto
Encapsulamento
Herana
Polimorfismo.
Mtodos e propriedades
Modificadores de escopo
Metodologia:
Os contedos programticos ofertados nessa disciplina sero desenvolvidos por meio das Tele-Aulas de
forma expositiva e interativa (chat tira dvidas em tempo real), Aula Atividade por Chat para
aprofundamento e reflexo e Web Aulas que estaro disponveis no Ambiente Colaborar, compostas de
contedos de aprofundamento, reflexo e atividades de aplicao dos contedos e avaliao. Sero
tambm realizadas atividades de acompanhamento tutorial, participao em Frum, atividades prticas e
estudos independentes (auto estudo) alm do Material do Impresso por disciplina.
Avaliao Prevista:
WEBAULA 1
Apresentao
Caros alunos,
Sou o professor Marcio Roberto Chiaveli.
Estaremos trabalhando juntos na Disciplina de Desenvolvimento Orientado a Objetos I. Vamos aplicar, na prtica, o que
conhecemos na teoria desta disciplina, um conceito amplamente discutido e estudado no meio tecnolgico de desenvolvimento
de softwares.
Afinal, um software bem projetado garante a integridade das informaes, que so geradas na sua execuo.
Aqui na unidade I, vamos tratar dos procedimentos iniciais de como projetar e implementar uma classe em c#. Tambm vamos
aprender como instanciar um objeto desta classe e consumi-lo.
O estudo da programao orientada a objeto em C# passa obrigatoriamente pela criao de sua primeira classe. Nesta web aula,
vamos fazer passo-a-passo como criar uma classe.
Para desenvolvermos todos os nossos exerccios, vamos criar aplicativos do tipo CONSOLE APPLICATION.
Vamos l!
Vamos abrir o C# e criarmos um novo projeto, selecionando, no menu do sistema, a opo File -> New Project... O C# mostrar
a sua biblioteca de templates de projetos. Selecione a template Console Application, e, na parte inferior da tela de templates,
digite um nome para o nosso projeto. Ento, no campo Name, coloque o nome do projeto de Web Aula1.
Se tudo deu certo, estar aparecendo na sua tela o seguinte trecho de cdigo:
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
}
}
}
Muito
bem,
para
testarmos
se
o
nosso
projeto
foi
criado
corretamente,
vamos
fazer
um
teste:
Escreva o seguinte cdigo que est em negrito logo aps a linha static void Main(string[] args). Ficando, ento, da seguinte
forma:
static void Main(string[] args)
{
Console.WriteLine("Ola Mundo");
Console.Write("Pressione uma tecla para continuar");
Console.ReadKey();
}
Agora, pressione a tecla F5 para executar a aplicao. Ser mostrada a seguinte tela:
Figura 1
Ok!!!
Bom, isso foi s para aquecer. Vamos agora criar a nossa classe.
Conforme a figura abaixo, na janela Solution Explorer, clique com o boto direito sobre o nome do projeto que
criamos, WebAula1, depois selecione Add Class...
Figura 2
Novamente, o C# mostrar a janela que disponibiliza as templates do projeto. Como voc pode ver, atemplate Class j est
selecionada. Ento, vamos dar um nome para a nossa classe, substituindo o nome default (Class1.cs) que o C# sugere, digitando
o nome Pessoa no campo Name na parte inferior da tela das templates, e clicando no boto Add.
Temos agora em nosso projeto uma arquivo chamado Pessoa.cs, como est sendo mostrado na janela do Solution Explorer.
A primeira coisa que vamos fazer renomear a nossa classe como _Pessoa. Isso mesmo, coloque um tarcinho (underline) no
comeo do nome. Isso ser um padro que vamos assumir em todas a classes que criarmos. Vocs vo entender mais frente a
razo disto.
Agora vamos criar os atributos private da nossa classe. Entre as chaves do corpo da nossa classe vamos comear a codific-los.
namespace WebAula1
{
class _Pessoa
{
private DateTime _DataCadastro;
private int
_Codigo;
private string _Nome;
private string _Cpf;
private string _Endereco;
private string _Cidade;
private string _Uf;
private string _Cep;
}
}
Veja, criamos somente atributos private. Isso quer dizer que estes atributos no estaro disponveis fora desta classe. Para que
possamos usar esta classe e gravar valores nos atributos, precisamos public-los, ou seja, criarmos propriedades pblicas que
permitam o acesso a estes atributos. Vamos fazer isto agora.
Figura 3
Apague as trs linhas que fizemos no comeo da aula e escreva o seguinte cdigo para instanciar nossa classe:
namespace WebAula1
{
class Program
{
static void Main(string[] args)
{
_Pessoa Pessoa = new _Pessoa();
}
}
}
A linha em negrito est criando um objeto do tipo _Pessoa. Veja agora porque usamos um (_) underline no nome da classe:
justamente para que, quando formos criar um a instncia para um objeto, possamos usar o nome sem o (_) underline.
Entenderam?
Bom, vamos seguir com o nosso cdigo. Depois de criar o objeto, vamos us-lo. Para isso, vamos escrever um cdigo que
pergute na tela os dados para preencher os campos da nossa classe. Veja como ficaria:
namespace WebAula1
{
class Program
{
static void Main(string[] args)
{
_Pessoa Pessoa = new _Pessoa();
Console.Write("Digite o cdigo.....:");
// Veja que nesta linha precisamos fazer a converso
// do valor digtado pelo usurio pois toda entrada via console
// do tipo texto e o nosso cdigo e int, por isso devemos
// fazer a converso utilizando o metodo ToInt32 da classe
// Convert.
Pessoa.Codigo = Convert.ToInt32(Console.ReadLine());
Console.Write("Digite o nome.......:");
Pessoa.Nome = Console.ReadLine();
Console.Write("Digite o cpf........:");
Pessoa.Cpf = Console.ReadLine();
Console.Write("Digite o endereo...:");
Pessoa.Endereco = Console.ReadLine();
Console.Write("Digite a cidade.....:");
Pessoa.Cidade = Console.ReadLine();
Console.Write("Digite o estado.....:");
Pessoa.Uf = Console.ReadLine();
Console.Write("Digite o cep........:");
Pessoa.Cep = Console.ReadLine();
Console.WriteLine("=========================================");
Console.WriteLine(" Mostrando o contedo da classe Pessoa");
Console.WriteLine("=========================================");
Console.WriteLine("Codigo.......: {0}", Pessoa.Codigo);
Console.WriteLine("Nome.........: {0}", Pessoa.Nome);
Console.WriteLine("Cpf..........: {0}", Pessoa.Cpf);
Console.WriteLine("Edereo......: {0}", Pessoa.Endereco);
Console.WriteLine("Cidade.......: {0}", Pessoa.Cidade);
Console.WriteLine("Estado.......: {0}", Pessoa.Uf);
Console.WriteLine("Cep..........: {0}", Pessoa.Cep);
Console.ReadKey();
}
}
}
Por hoje s!
CliquWEBAULA 2
Unidade 1 Herana
Bom, j estamos familiarizados com o C#, no mesmo?
Ento, vamos direto ao assunto.
Vamos abrir o C# e criarmos um novo projeto, selecionando no menu do sistema a opo File -> New Project... Selecione
a template Console Application e, na parte inferior da tela de templates, digite o nome WebAula2 para nosso projeto.
Conforme a figura abaixo, na janela Solution Explorer, clique com o boto direito sobre o nome do projeto que criamos,
WebAula2. Depois, selecione Add Class... para adicionarmos um arquivo que conter a classe pai.
Figura 1
Agora, d o nome de Pessoa para o arquivo .cs.
No arquivo Pessoa.cs, renomeie a classe Pessoa para _Pessoa (Lembrem do underline ( _ ) ).
Agora, vamos criar os atributos private da classe, como segue:
private
private
private
private
int _Codigo;
string _Nome;
string _Cpf;
string _Fone;
Vamos fazer a mesma coisa para o atributo Fone, cujo mtodo ficaria desta forma
private string FormatarFone()
{
return _Fone.Substring(1, 4) + "-" +
_Fone.Substring(5, 4);
}
Novamente, substitua a chamada do mtodo:
public string Fone
{
get { return FormatarFone(); }
set { _Fone = value; }
}
Veja que agora ns temos trs opes para instanciar a nossa classe _Aluno.
Vamos codificar a classe, como segue abaixo:
namespace WebAula2
{
class _Aluno: _Pessoa
{
public _Aluno(int pCodigo, string pNome, int pMatricula)
{
Codigo = pCodigo;
Nome
= pNome;
Matricula = pMatricula;
}
public _Aluno(int pCodigo)
{
Codigo = pCodigo;
}
public _Aluno()
{
}
private
private
private
private
int _Matricula;
string _Curso;
string _Turno;
string _Turma;
Console.ReadKey();
}
Clique aqui para baixar o projeto inteiro.
Resumo: Vimos como criar uma classe atravs da herana e como utiliz-la em programas.
At a prxima! WEBAULA 3
Unidade 1 Criando minha primeira classe com herana e polimorfismo
Figura 1
Conforme a figura abaixo, na janela Solution Explorer, clique com o boto direito sobre o nome do projeto que
criamos, WebAula1, e depois selecione Add Class... para adicionarmos um arquivo que conter a classe pai.
Figura 2
Funcionario.Flush();
Funcionario.Close();
}
Veja que o construtor da classe StreamWriter recebe o nome do arquivo como parmetro. O segundo parmetro booleano, e,
se for (true), diz a classe que, se ao arquivo j existir, ele o abre para serem adicionados mais dados; e, se for (false), ele
sempre criar um novo, sobrepondo o antigo.
Mtodo da classe StreamWriter
Crie o novo mtodo com o nome TelaVendedor, da mesma forma como criamos o mtodo TelaFuncionario, s que desta vez,
usando a classe Vendedor conforme o cdigo abaixo.
private static void TelaVendedor()
{
double Salario;
_Vendedor Vendedor = new _Vendedor();
// Lembre que a console s le valores como textos
// por isso estamos usanto o convert para inteiro
Console.Write("Cdigo.....:");
Vendedor.Codigo = Convert.ToInt32(Console.ReadLine());
Console.Write("Nome.......:");
Vendedor.Nome = Console.ReadLine();
Console.Write("Cpf........:");
Vendedor.Cpf = Console.ReadLine();
Console.Write("Regio.....:");
Vendedor.RegiaoAtuacao = Console.ReadLine();
Console.Write("Tipo.......:");
Vendedor.TipoInternoExterno = Console.ReadLine();
Console.Write("Comisso...:");
Vendedor.Comissao = Convert.ToDouble(Console.ReadLine());
// E aqui estamos convertendo o valor lido
// pela console para Double
Console.Write("Salario....:");
Vendedor.Salario = Convert.ToDouble(Console.ReadLine());
Console.Write("");
// Veja, aqui estamos invocando o mtodo
// para calcular o salario do venddor
Salario = Vendedor.CalcularSalario();
Console.Write("O salario liquido do vendedor {0} de : {1:c}", Vendedor.Nome, Salario);
Console.ReadKey();
}
Bom, como exerccio vou deixar vocs implementarem o mtodo Salvar, usando o conceito de polimorfismo.
Baixe o cdigo completo aqui.
WEBAULA 4
Unidade 1 Classes Abstratas, Interfaces e sealed
Classe abstrata
A classe abstrata um tipo de classe que somente pode ser herdada e no instanciada. De certa forma, pode-se dizer que este
tipo de classe uma classe conceitual que pode definir funcionalidades para que as suas subclasses possam implement-las.
O conjunto de mtodos na classe abstrata obrigatoriedade, assim como a implementao nas suas subclasses. Em uma classe
abstrata, os mtodos declarados podem ser abstratos ou no, e suas implementaes devem ser obrigatrias na subclasse.
Quando criamos um mtodo abstrato em uma classe abstrata, sua implementao obrigatria. Caso voc no implemente o
mesmo, o compilador criar um erro em tempo de compilao.
Exemplo de implementao retirado do books online em C#.
abstract class formaClasse
{
abstract public int Area();
}
class quadrado : formaClasse
{
int x, y;
// Se no for implementado o mtodo Area()
class MainClass
{
static void Main()
{
ClasseSelada sc = new ClasseSelada();
sc.x = 110;
sc.y = 150;
Console.WriteLine("x = {0}, y = {1}", sc.x, sc.y);
}
}
Quando devo utilizar o que?
Classes Abstratas podem adicionar mais funcionalidades, sem destruir as funcionalidades das classes filhos. Essas poderiam estar
usando uma verso mais antiga. Classes abstratas fornecem uma maneira simples e fcil para "versionar" nossos componentes.
Atravs da atualizao da classe base, todas as classes que herdam so atualizadas automaticamente com a mudana. Em uma
interface, a criao de funes adicionais ter um efeito sobre suas classes filhos devido necessidade de implementao dos
Mtodos criados na interface.
Classes abstratas deveriam ser usadas principalmente para objetos que esto estritamente relacionados, enquanto o uso de
interfaces mais adequado para fornecer funcionalidade comum a classes independentes.
Digamos que existem duas classes, de pssaros e de avies, e que nas duas existem os mtodos chamados voar(). Seria
estranho para uma classe avies herdar, a partir de uma classe pssaros, apenas porque necessita do mtodo voar(). Em vez
disso, o mtodo voar() deve ser definido em uma interface, e, em ambas as classes, pssaros e avies devem implementar a
interface. Se quisermos proporcionar uma funcionalidade em comum para os componentes, devemos utilizar uma classe
abstrata.
Classes abstratas nos permitem implementar parcialmente uma classe, enquanto a interface no contm a implementao de
qualquer membro. Por isso, a seleo de interface ou classes abstratas depende das necessidades e design do nosso projeto.
Podemos fazer uma classe abstrata, interface, ou at uma combinao de ambas, dependendo de nossas necessidades. Se
desejarmos criar uma classe ou mtodo interno para um componente ou library, o ideal utilizar o tipo sealed porque qualquer
tentativa de anular algumas das suas funcionalidades no ser permitida.
Ns podemos marcar uma classe ou mtodo como selados por motivos comerciais, a fim de impedir um terceiro de modificar
nossa classe. Por exemplo, no .NET, a string uma classe selada. No devemos usar a palavra-chave sealed com um mtodo, a
menos que o mtodo seja uma mudana de outro mtodo; ou, se estamos definindo um novo mtodo e no queremos que
ningum mais o sobreponha, no devemos declar-lo como virtual em primeiro lugar. A palavra-chave selado fornece uma
maneira de garantir que, ao sobrepor um mtodo, seja fornecido um "final". Significa que ningum mais poder sobrepo-lo
novamente.
Concluso
Devemos utilizar classes abstratas quando queremos compartilhar funcionalidades em comum entre classes, e utilizar interfaces
quando desejamos que uma classe possua as mesmas assinaturas. Porm, a implementao de cada mtodo no precisa ser a
mesma.