Baixe o app para aproveitar ainda mais
Prévia do material em texto
Classes: Parte I ECA104 – Aula 02 Prof. João Paulo R. R. Leite joaopaulo@unifei.edu.br Universidade Federal de Itajubá Programação Orientada a Objetos • Linguagens OO surgiram entre o final dos anos 70 e começo dos anos 80 e se popularizaram rapidamente (Ex: C++, Java, C#!) • A orientação a objetos não é apenas uma • A orientação a objetos não é apenas uma nova maneira de programar. – Ela nos provê com um modelo de programação que torna natural a utilização de conceitos do mundo real, facilitando a tradução de um problema para o domínio computacional. Programação Orientada a Objetos • Linguagens de programação procedurais são voltadas para a criação e chamadas de procedimentos, ou funções, que agregavam novas funcionalidades ao programa principal. – Podemos dizer que ela é baseada em ações ou verbos (faça isso, faça aquilo). – Exemplos: C, FORTRAN, COBOL, ALGOL, etc. • Força o desenvolvedor a pensar mais em termos computacionais do que em termos naturais da aplicação. Programação Orientada a Objetos • Programas que utilizam OOP são formados por também por fragmentos de programas estruturados, mas possuem seu foco voltado para a definição de classes ou tipos definidos pelo usuário (substantivos).pelo usuário (substantivos). – Ao traduzir um problema real para um modelo orientado a objetos, podemos transpor cada um de seus componentes para uma classe, que modela suas características, comportamentos e relacionamentos com objetos de outras classes. Programação Orientada a Objetos • Classe � Classificação (Termo base) – Processo integrado em nossa maneira de pensar. – Agrupamos, naturalmente em nossa mente, objetos com comportamentos e características semelhantes em “categorias” (ou “classes”!).em “categorias” (ou “classes”!). • Coletar informação sobre categorias é essencial para nossa sobrevivência. Nós nos deparamos a todo momento com coisas novas e, se não fossemos capazes de aprender e dar palpites, nós não seríamos capazes de sobreviver. – Quando você vê um objeto e o categoriza como “cadeira”, reconhece que provavelmetne você pode se sentar nela! – Quando você vê um animal e o categoriza como “T-Rex”, é melhor você ficar imóvel! Programação Orientada a Objetos • Programação Orientada a Objetos consiste em: 1. Identificar as entidades (ou classes de objetos) presentes em um problema, analisar que tipo de informação elas precisam conter e quais tarefas informação elas precisam conter e quais tarefas precisam realizar; 2. E representá-las através de classes em uma linguagem de programação de alto nível. – Uma entidade pode representar tanto um item concreto, como um “Carro” ou “Cliente”, quanto um item mais abstrato como “Transação” ou “Reunião”. Programação Orientada a Objetos • Mas então o que, afinal, são as classes? • Elas definem um conjunto de dados (atributos, características) e funções/métodos (comportamentos) que são comuns a uma classe de objetos pertencente ao universo do problema.de objetos pertencente ao universo do problema. • Através das classes, é possível gerar inúmeros objetos com características semelhantes, da mesma maneira que um construtor é capaz de construir várias casas semelhantes a partir de uma única planta. A partir de uma definição de classe – de uma “planta”, é possível construir quantos objetos forem necessários – “casas”. As casas compartilham características, mas são independentes. A mudança em uma não influencia nas outras. Programação Orientada a Objetos • Mas então classe e objeto são coisas diferentes? • Exemplo: – Imagine que estejamos interessados em modelar computacionalmente um sistema real que envolva carros. A criação de um tipo “Carro” seria carros. A criação de um tipo “Carro” seria imprescindível e teria atributos como “potência”, “cor”, “comprimento”, etc., além de comportamentos como “acelerar”, “frear”, etc. – A definição da classe nos dá, portanto, uma lista das características comuns a todos os carros e a especificação de todos os seus comportamentos. Programação Orientada a Objetos • Exemplo: – Agora imagine que seja necessário criar durante o programa “instâncias” destas classes. • Um Celta prateado, com 75cv; • Uma Ferrari vermelha, com 520cv.• Uma Ferrari vermelha, com 520cv. – O programa utiliza uma classe (Carro) para criar dois objetos (celta1000 e ferrariF50) diferentes e independentes, que possuem características próprias e preenchem com valores a lista de atributos definida pela classe. • Imaginando que a aceleração seja uma função apenas da potência, os dois carros acelerariam da mesma maneira? Hands-On! Criando uma classe no Visual Studio 1. Crie um projeto 2. Clique sobre o ícone do projeto no “Solution Explorer” e escolha o item “Add > Class” Hands-On! Criando uma classe no Visual Studio 3. Na tela que irá aparecer, digite um nome para a sua classe e pressione o botão “Add”. Usualmente, cada palavra do nome da classe inicia-se com letra maiúscula, e os demais caracteres são minúsculos. Ex: Circulo, FiguraGeometrica, ArvoreBinaria 4. Um novo arquivo será criado em seu projeto com a extensão “.cs” e o nome da sua classe.nome da sua classe. O código básico para sua classe é criado automaticamente • Declaração de namespaces • Nome da classe Hands-On! Criando uma classe no Visual Studio 5. Agora, adicionamos atributos e métodos à classe: Alguns pontos devem ser ressaltados: 1. Construtor? 2. Public e Private? 3. this? • A declaração de objetos no decorrer do programa é realizada de maneira semelhante às variáveis de tipos primitivos (int, double, etc.). • O objeto precisa ser alocado na memória: Para criar uma instância do objeto, chamamos o construtor da classe através da palavra reservada new. Programação Orientada a Objetos da palavra reservada new. • Atributos e métodos da classe são acessados através de um handle (o ponto!), como em outroCirculo.calculaArea(). • O construtor é um método que possui o mesmo nome da classe, e precisa ser chamado sempre que o programa instancia um objeto daquele tipo (new). • Através dele é possível inicializar os membros de dados, por exemplo, ou realizar tarefas de configuração inicial da classe (posX = posY = 0). Construtores da classe (posX = posY = 0). • Sua sintaxe é semelhante a um método comum, mas não possui um tipo de retorno. Uma classe pode ter quantos construtores forem necessários: Todos terão o mesmo nome, mas uma lista diferente de parâmetros. • Caso não seja explicitamente criado pelo programador, um construtor padrão (vazio) é gerado pelo próprio compilador. • Exemplos: Construtores A palavra reservada “this” faz referência à instância atual da classe, ou seja, ao objeto que está chamando o método. Se o Círculo de raio 10 chamar o método calculaArea(), dentro deste método, this.raio será igual a 10. Em vários contextos (como no exemplo ao lado), o seu uso é opcional e serve apenas para aumentar a clareza do código. • Atributos e métodos são análogos às variáveis e funções, aprendidos no curso de programação em C. • Para declarar um atributo: especificadorAcesso tipoAtributo nomeAtributo; Ex: Atributos e Métodos – private int altura; – public Circulo circuloInterno; • Para declarar e implementar um método: especificadorAcesso tipoRetorno nomeAtributo(parametros) {...} Ex: – public Circulo createCirculo(double raio, int x, int y) { ... } – public void setRaio(double raio) { ... } – private int getInternalResults() { ... } Visibilidade de Membros • Atributos e métodos de uma classe pertencem ao escopo da classe. – Dentro da classe, estes membros podem ser acessados livremente de maneira direta ou através da referência this.através da referência this. • Outras classes, incluindo as que você mesmo implementou e que estão no mesmo projeto, necessitam de permissão para acessar seus itens, portanto, é necessário criar uma regra de acesso para cada atributo e método.Visibilidade de Membros • O acesso a membros da classe é definido através de palavras-chave conhecidas como especificadores de acesso. São eles: – private (Privado);– private (Privado); – public (Público); – Default (Padrão) • Utilizado quando o programados não especifica o controlador de acesso, é sinônimo de private em C#. Visibilidade de Membros • Private: Podem ser acessados somente por funções membro da mesma classe. – O acesso externo é feito através de métodos que formam a interface pública da classe (ex: set/get).formam a interface pública da classe (ex: set/get). – Métodos que façam trabalho interno. • Public: Podem ser acessados por qualquer classe do programa, bastando que se faça referência ao namespace, caso esteja em outro. • Repare que o IntelliSense somente mostra os itens públicos da classe, que são calculaArea e setRaio. Os atributos privados não são exibidos, pois seu acesso está restrito somente ao escopo da classe. Visibilidade de Membros Mas pra que restringir? Encapsulamento • Um dos mais importantes conceitos de orientação a objeto. • Possui dois objetivos básicos: – Organização: Reunir em uma única estrutura – a – Organização: Reunir em uma única estrutura – a classe, dados e comportamentos comuns a uma categoria de objetos; – Privacidade: Controlar a utilização da classe, ocultando detalhes de sua implementação e provendo uma interface pública clara e sucinta, que supra as necessidades do usuário. Encapsulamento • Objetos comunicam-se e interagem uns com os outros através de interfaces públicas bem definidas, não sendo normalmente permitido que um conheçam a implementação do outro. • Como isso é possível?• Como isso é possível? • É perfeitamente possível dirigir um carro sem conhecer completamente sua mecânica. Utilizamos uma interface pública que mascara sua implementação através de dispositivos simples como pedais e volante. Encapsulamento • E para que serve? • O encapsulamento dos métodos torna muito mais simples a manutenção de sistemas e reutilização de software. – Ao modificar a implementação de um método, ou – Ao modificar a implementação de um método, ou acrescentar alguma otimização no código, não é necessário modificar sua interface. – Usuário da classe não precisa modificar uma linha de código sequer. A chamada permanece igual. • Mantém em segredo a implementação, caso seja estratégico para o desenvolvedor. Namespaces • Ajudam a organizar e manter o projeto, além de facilitar a reutilização de software. – Organização do código; – Evitam conflitos entre nomes de classes, oferecendo convenção para nomes de classes únicos:convenção para nomes de classes únicos: • Exemplo: PrimeiroPrograma.NomeClasse Empresa.Projeto.NomeClasse • Caso uma classe esteja em um namespace e deseje utilizar uma classe em outro namespace, é necessário declarar a intenção de uso no início do programa: – using Unifei.Tetris; – using Eca.CandyCrush; Hands-On! Utilizando a classe criada no Programa Principal Métodos e Atributos static • Repare na assinatura do método main: • O que a palavra reservada static representa? • Em C#, todos os métodos precisam ser declarados dentro de classes. • No entanto, caso você declare um método como static, • No entanto, caso você declare um método como static, ele poderá ser chamado sem que haja uma instância daquela classe – sem que haja um objeto. • Normalmente são métodos que provêem alguma utilidade independente, que não necessite acessar atributos de uma instância. • Não é permitido o acesso a atributos e métodos de instância (non-static) dentro de um método static. Métodos e Atributos static • A classe Math, do namespace System, provê uma grande quantidade de métodos estáticos, que são muito úteis para a realização de cálculos: Pow(), Sqrt(), Min(), Max(), Sin, Cos(), etc. • Como fazer a chamada? NomeClasse.NomeMetodo()• Como fazer a chamada? NomeClasse.NomeMetodo() Ex: Math.Pow(10, 2); Math.Sqrt(100); // sem instância da classe • Como seria feita se não fosse métodos estáticos? Ex: Math m = new Math(); // instância da classe m.Pow(10,2); m.Sqrt(100); Métodos e Atributos static • Imagine que você queira prover um método estático para sua classe Circulo, que devolva a área de um círculo qualquer. • Não é possível acessar o atributo raio, pois não haverá instância da classe Circulo; • Faça com que o método receba o raio como parâmetro: • Para utilizar o método estático em outra parte do programa, simplesmente chame o método diretamente da classe (sem instância de objeto), passando o valor de raio como parâmetro: Métodos e Atributos static • E porque o método main precisa ser estático? – Para que possa ser invocado pela CLR sem que ela precise criar uma instância da sua classe principal. • Program.Main(); • Existem também atributos estáticos?• Existem também atributos estáticos? – Sim! Esses atributos criam campos que são compartilhados entre todas as instâncias daquela classe – tantas quantas forem criadas. – Todos os objetos daquela classe acessam o mesmo atributo, seja para modifica-lo ou apenas para lê-lo. Métodos e Atributos static • Imagine que gostaríamos de manter um registro com a quantidade de objetos do tipo Circulo criados. – Devemos criar um atributo público estático do tipo inteiro, inicializa-lo com 0 e incrementá-lo sempre que o construtor for chamado: Métodos e Atributos static • Escreva um programa que simula o comportamento de um robô de reconhecimento em um planeta distante. – O planeta está dividido em uma superfície quadrada de 20 por 20 quadrantes, onde o robô se move um quadrante por vez e guarda sua posição. Hands-On! Criando um sistema do zero por vez e guarda sua posição. – A missão é mover-se sobre a superficie e coletar rochas, que podem estar ou não presentes naquele quadrante (Random). – O planeta precisa ser inicializado com algumas rochas (50?) e, a cada movimento do robô, precisa ser exibido na tela. – Ao passar sobre uma rocha, o robô a coleta e incrementa um contador de rochas. A rocha então some do quadrante. • Escreva um programa que simula o comportamento de um robô de reconhecimento em um planeta distante. – O planeta está dividido em uma superfície quadrada de 20 por 20 quadrantes, onde o robô se move um quadrante por vez e guarda sua posição. Hands-On! Criando um sistema do zero por vez e guarda sua posição. – A missão é mover-se sobre a superficie e coletar rochas, que podem estar ou não presentes naquele quadrante (Random). – O planeta precisa ser inicializado com algumas rochas (50?) e, a cada movimento do robô, precisa ser exibido na tela. – Ao passar sobre uma rocha, o robô a coleta e incrementa um contador de rochas. A rocha então some do quadrante. • Quais as entidades, características e responsabilidades? – Robô Hands-On! Criando um sistema do zero • Atributos: Posição e Contador de Rochas • Métodos: Mover e Coletar Rochas – Planeta • Atributos: Quadrantes • Métodos: Inicializar e Exibir
Compartilhar