Classes. BCC Programação Orientada a Objectos(POO) Departamento de Computação - UFOP Baseado nos slides do Prof. Marco Antônio Carvalho

Documentos relacionados
Classes II. BCC Programação Orientada a Objectos(POO) Departamento de Computação - UFOP Baseado nos slides do Prof. Marco Antônio Carvalho

Introdução a classes e objetos. Copyright 2006 by Pearson Education

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

Estruturas (registros)

BCC Introdu c ao ` a Programa c ao I Ponteiros Guillermo C amara-ch avez UFOP 1/54

Friends e Sobrecarga

BCC Introdu c ao ` a Programa c ao Portugol Guillermo C amara-ch avez UFOP 1/35

Aula 17: Funções (Parte III) e Introdução a Vetores

BCC Introdu c ao ` a Programa c ao I Ponteiros Guillermo C amara-ch avez UFOP 1/61

Programação Avançada C++ Slide 12 Nielsen Castelo Damasceno

A programação orientada a objetos tenta simular estes aspectos, trazendo para o computador a realidade do dia-a-dia.

Programação: Vetores

Introdução à Programação Orientada a Objetos em C++

Conceitos Básicos de Programação

Aula 25: Alocação Dinâmica

Classes e Objetos. Sintaxe de classe em Java

Estruturas II UFOP 1/35

Implementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Linguagem de Programação C++

CLASSES, OBJETOS, MÉTODOS E STRING

Programação Orientada a Objetos Aula I Declaração de classes, métodos construtores. Prof.: Bruno E. G. Gomes IFRN

Aula 27: Estruturas heterogêneas e alocação dinâmica

COMPORTAMENTOS - Observações

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Templates. BCC Programação Orientada a Objectos(POO) Departamento de Computação - UFOP

Visibilidade e Encapsulamento

Aula 23: Ponteiros Introdução a Programação Túlio Toffolo & Puca Huachi

Programação I Curso: Sistemas de Informação. Prof.: José Ronaldo Leles Júnior .:

Implementando um Projeto. Programação em Java. Do Projeto para Implementação. Classe Pública em Java. Corpo de Classes e Métodos. Convenção de Nomes

Modificadores de acesso e atributos de classe

Estruturas Homogêneas II (Matrizes)

Aula 28: Arquivos de texto

Programação I A Linguagem C. Prof. Carlos Alberto

BCC Programação Orientada a Objectos(POO) Departamento de Computação - UFOP Baseado nos slides do Prof. Marco Antônio Carvalho

AULA 2 VISÃO BÁSICA DE CLASSES EM PHP

Java - Sobrecarga/Composição

Programação Orientada a Objetos

C com introdução a OO

Classes e Objetos INTRODUÇÃO À ORIENTAÇÃO A OBJETOS COM JAVA - MÓDULO II. Classes. Objetos. Um modelo para a criação de objetos

Algoritmos e Programação 2. Objetos e Classes em Java. Classes. Revisão. Definições de classes incluem (geralmente):

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Controle de Fluxo Comandos de decisão multipla

Aula 26: Estruturas heterogêneas

Aula 24: Ponteiros e Alocação Dinâmica

Linguagem de Programação C++ Se analisarmos a manipulação do objeto c, efetuada no exercício anterior, e compararmos com o que acontece em um banco

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À PROGRAMAÇÃO COM C/C++ Prof. Dr. Daniel Caetano

Vetores e Matrizes. Prof. Fabrício Olivetti de França Charles Henrique

Algoritmos e Programação

Introdução à UML. Prof. Jesus José de Oliveira Neto

POO e C++: Herança e Polimorfismo

Programação para Games II. Professor Ariel da Silva Dias Orientação a Objetos

Linguagem C. André Tavares da Silva.

Programação Orientada a Objetos

Arquivos de Texto UFOP 1/41

Linguagem de programação Programação Orientada a objetos

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

Variáveis, Comandos de Atribuição e Comando de Entrada e Saída

//conteúdo do arquivo Matriz.h class Matriz { private: int *elementos; int numerodelinhas; int numerodecolunas; void setnumerodelinhas(int); void

Classes e Objetos. Prof. Leonardo Barreto Campos 1

Classes e Objetos em Java. Algoritmos e Programação I. Classes. Classes. Modificadores de Acesso. Classes. Revisão

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

AULA 2: INTRODUÇÃO A PYTHON. Luís Feliphe Silva Costa

Conversão de Tipos. BCC Programação Orientada a Objectos(POO)

Aula 08 Encapsulamento. Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes

Programação científica C++

PROGRAMAÇÃO I INTRODUÇÃO À ORIENTAÇÃO A OBJETOS

Parte IV. Linguagens de Programação. Relembrando da Última Aula... Empacotador de Préprocessadores. Primeiro Exemplo Usando Classes em C++

Linguagens de Programação

Variáveis, Comandos de Atribuição e Comando de Entrada e Saída

Linguagem de Programação II Implementação

Estrutura de um Algoritmo, Variáveis, Comandos de Entrada e Saída e Expressões Aritméticas

AULA 11 PROGRAMAÇÃO ORIENTADA A OBJETOS (INTRODUÇÃO) Disciplina: Programação Orientada a Objetos Professora: Alba Lopes

Linguagem Técnica I. Prof. Jonatas Bastos

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Instituto de Informática Estrutura de Dados II

Fundamentos de Programação de Computadores Linguagem C Vetor Unidade 09 Linguagem C - Vetor 1/16

Aula 4: Introdução à Linguagem C++

Arrays em Java. Prof. Renato Pimentel. GGI030 Programação Orientada a Objetos. Universidade Federal de Uberlândia Faculdade de Computação

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos

INTRODUÇÃO AO USO DO DEV C++ Disciplina: Introdução à Ciência da Computação Prof. Modesto Antonio Chaves Universidade estadual do Sudoeste da Bahia

ITENS FUNDAMENTAIS Programando em C++

PADRONIZAÇÃO 10. INTERFACES PADRONIZAÇÃO CONTRATOS

Centro Universitário Franciscano Curso de Sistemas de Informação Disciplina de algoritmos e programação II. Ponteiros

Introdução à Programação. 2ª aula. Prof. José Honorato F. Nunes

SCS Sistemas de Controle / Servomecanismos. Aula 01 Introdução ao software MATLAB

PROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO

Java Standard Edition (JSE)

Conceitos de Linguagem de Programação - 2

Java Como Programar, 8/E

Construtores e Especificadores de Acesso

LISTA DE EXERCÍCIOS 2

Controle de Fluxo Comandos de repetição: while e do-while

Algoritmo e Programação Matemática

FACULDADE BATISTA MINEIRA - CST Banco de Dados Estruturas de Dados - Variáveis

6 Alguns conceitos e comandos em programação

LINGUAGEM C: ARRAYS DE CARACTERES: STRINGS

Transcrição:

Classes BCC 221 - Programação Orientada a Objectos(POO) Guillermo Cámara-Chávez Departamento de Computação - UFOP Baseado nos slides do Prof. Marco Antônio Carvalho

Introdução I Estamos acostumados a criar programas que: Apresentam mensagens ao usuário; Obtêm dados do usuário; Realizam cálculos e tomam decisões. Todas estas ações eram delegadas à função main ou outras; A partir de agora, nossos programas terão uma função main e uma ou mais classes Cada classe consistindo de dados e funções. 1/42

Introdução II Suponhamos que queremos dirigir um carro e acelerá-lo, de modo que ele fique mais veloz; Antes disto, alguém precisa projetar e construir o carro; O projeto do carro tipicamente começa com desenhos técnicos Que incluem o pedal do acelerador que utilizaremos. 2/42

Introdução III De certa forma, o pedal do acelerador esconde os mecanismos complexos que fazem com que o carro acelere Isto permite que pessoas sem conhecimento de mecânica acelerem um carro; Acelerar é uma interface mais amigável com a mecânica do motor. Acontece que não podemos dirigir os desenhos técnicos É necessário que alguém construa o carro, com o pedal. 3/42

Introdução IV Depois de construído, o carro não andará sozinho Precisamos apertar o pedal de acelerar. Vamos fazer uma analogia com programação orientada a objetos. 4/42

Introdução V Realizar uma tarefa em um programa requer uma função O main, por exemplo. A função descreve os mecanismos que realizam a tarefa Escondendo toda a complexidade do processo, assim como o acelerador. Começaremos pela criação de uma classe, que abriga uma função 5/42

Introdução VI Uma função pertencente a uma classe é chamada método São utilizadas para desempenhar as tarefas de uma classe. Da mesma forma que não é possível dirigir o projeto de um carro, você não pode dirigir uma classe; É necessário antes construir o carro para dirigí-lo; É necessário criar um objeto de uma classe antes para poder executar as tarefas descritas por uma classe. 6/42

Introdução VII Ainda, vários carros podem ser criados a partir do projeto inicial Vários objetos podem ser criados a partir da mesma classe. Quando dirigimos um carro, pisar no acelerador manda uma mensagem para que o carro desempenhe uma tarefa Acelere o carro. 7/42

Introdução VIII Similarmente, enviamos mensagens aos objetos As chamadas aos métodos; Além das competências de um carro, ele possui diversos atributos Número de passageiros; Velocidade atual; Nível do tanque de combustível, etc. 8/42

Introdução IX Assim como as competências, os atributos também são representados no projeto de um carro Cada carro possui seus atributos próprios; Um carro não conhece os atributos de outro. Da mesma forma ocorre com os objetos Cada objeto tem os seus próprios atributos 9/42

Classes I Vejamos um exemplo de uma classe que descreve um diário de classe Utilizado para manter dados sobre a avaliação de alunos. Vejamos também como criar objetos desta classe. 10/42

Classes II Definir uma classe é dizer ao compilador quais métodos e atributos pertencem à classe A definição começa com a palavra class; Em seguida, o nome da classe Por padrão, a primeira letra de cada palavra no nome é maiúscula. O corpo da classe é delimitado por e ; Não se esqueça do ; no final. 11/42

Classes III Declaração de uma classe c l a s s Nome Classe { a t r i b u t o s.. p u b l i c : mé t o d o s.. } ; // fim da classe 12/42

Classes IV #i n c l u d e <i o s t r e a m > u s i n g namespace s t d ; // Definição da classe DiarioClasse c l a s s D i a r i o C l a s s e { p u b l i c : // método que exibe uma mensagem de boas-vindas v o i d mostramensagem ( ) { c o u t << " Seja Bem - vindo ao Diario de Classe" << e n d l ; } } ; i n t main ( ) { // cria um objeto da classe DiarioClasse D i a r i o C l a s s e meudiario ; // chama ao método mostramensagem meudiario. mostramensagem ( ) ; r e t u r n 0 ; } 13/42

Classes V Dentro da classe definimos os métodos e os atributos Separados pelo especificador de acesso (visibilidade) Basicamente, público (public), privado (private) e protegido (protected). 14/42

Classes VI O método mostramensagem() é público, pois está declarado depois deste especificador Ou seja, pode ser chamado por outras funções do programa e por métodos de outras classes. Especificadores de acesso são sempre seguidos de : 15/42

Classes VII A definição de um método se assemelha a definição de uma função Possui valor de retorno; Assinatura do método Lista de parâmetros 16/42

Classes VIII Assinatura: por padrão, começa com uma letra minúscula e todas as palavras seguintes começam com letras maiúsculas. Lista de parâmetros: va entre parênteses (tipo e identificador). Eventualmente, vazia Além disso, o corpo de um método também é delimitado por e. 17/42

Classes IX O corpo de um método contém as instruções que realizam uma determinada tarefa Neste exemplo, simplesmente apresenta uma mensagem 18/42

Classes X #i n c l u d e <i o s t r e a m > u s i n g namespace s t d ; c l a s s D i a r i o C l a s s e { p u b l i c : v o i d mostramensagem ( ) { c o u t << " Seja Bem - vindo ao Diario de Classe" << e n d l ; } } ; i n t main ( ) { // cria um objeto da classe DiarioClasse D i a r i o C l a s s e meudiario ; // chama ao método mostramensagem meudiario. mostramensagem ( ) ; r e t u r n 0 ; } 19/42

Classes XI Para utilizarmos a classe DiarioClasse em nosso programa, precisamos criar um objeto Há uma exceção em que é possível usar métodos sem criar objetos. Para criarmos um objeto, informamos o nome da classe como um tipo, e damos um identificador ao objeto; Uma vez criado o objeto, podemos utilizar seus métodos; Note que também podemos criar vetores e matrizes de objetos. 20/42

Classes XII Para utilizar um método, utilizamos o operador. Informamos o nome do objeto, seguido por. e o nome do método e eventuais parâmetros O método possui acesso aos atributos do objeto que o chamou Não possui acesso aos atributos de outros objetos, a não ser que estes sejam passados por parâmetro; 21/42

Classes XIII Como seria o diagrama de classe UML para a classe DiarioClasse? 22/42

Classe string I Existem várias classes prontas, com métodos úteis para várias finalidades Uma delas é a classe string, utilizada para manipulação de strings. Vamos incorporar a classe string em nosso exemplo anterior Como um parâmetro para o método do exemplo 23/42

Classe string II #i n c l u d e <i o s t r e a m > #i n c l u d e <s t r i n g > u s i n g namespace s t d ; c l a s s D i a r i o C l a s s e { p u b l i c : v o i d mostramensagem ( s t r i n g n o m e D i s c i p l i n a ){ c o u t << " Seja Bem - vindo ao Diario de Classe de" << n o m e D i s c i p l i n a << e n d l ; } // fim da função } ; // fim da classe i n t main ( ) { s t r i n g nome ; D i a r i o C l a s s e meudiario ; cout << "Digite o nome da disciplina : " ; g e t l i n e ( cin, nome ) ; meudiario. mostramensagem ( nome ) ; r e t u r n 0 ; } 24/42

Classe string III Para utilizarmos a classe string, precisamos incluir o arquivo <string> Depois podemos criar um objeto desta classe. Para lermos uma string com espaços em branco, utilizamos a instrução getline. 25/42

Classe string IV Existem duas sintaxes para a instrução getline Uma lê caracteres até que seja encontrado o final da linha getline ( cin, nameofcourse); A outra lê caracteres até que seja encontrado um caractere de terminação especificado por nós getline ( cin, nameofcourse, A ); Neste exemplo, a instrução lê caracteres até achar um A, que não será incluído na string. 26/42

Classe string V Métodos podem receber parâmetros assim como as funções Basta definir o tipo do parâmetro e seu identificador entre parênteses Se não houver parâmetros, deixamos os parênteses sem conteúdo. 27/42

Classe string VI Como fica o diagrama de classe UML para a classe diarioclasse agora que temos um parâmetro para o método mostramensagem? 28/42

Atributos I Nossa classe não possui atributos, apenas um método; Atributos são representados como variáveis na definição de uma classe Declarados dentro da classe Porém, fora dos métodos. Cada objeto da classe possui sua própria cópia dos atributos. 29/42

Atributos II #i n c l u d e <i o s t r e a m > #i n c l u d e <s t r i n g > u s i n g namespace s t d ; c l a s s D i a r i o C l a s s e { s t r i n g n o m e D a D i s c i p l i n a ; p u b l i c : v o i d mostramensagem ( s t r i n g n o m e D i s c i p l i n a ){ c o u t << " Seja Bem - vindo ao Diario de Classe de" << n o m e D i s c i p l i n a << e n d l ; } // fim da função } ; // fim da classe i n t main ( ) { s t r i n g nome ; D i a r i o C l a s s e meudiario ; cout << "Digite o nome da disciplina : " ; g e t l i n e ( cin, nome ) ; meudiario. mostramensagem ( nome ) ; r e t u r n 0 ; } 30/42

Getters e Setters I Atributos são definidos como privados Só podem ser alterados dentro da própria classe Tentar acessá-los fora da classe causará erro. Ocultação de informação; 31/42

Getters e Setters II Um método que altere o valor de um atributo é chamado de setter Por padrão, a nomenclatura é set+[nome do atributo]. Um método que retorne o valor de um atributo é chamado de getter Por padrão, a nomenclatura é get+[nome do atributo]. 32/42

Getters e Setters III Uma vez que nossa classe possui getters e setters, os atributos só devem ser acessados e alterados por eles Mesmo dentro de outros métodos que porventura necessitem acessar/alterar os atributos. Vamos alterar nosso exemplo anterior para que a string utilizada seja agora um atributo Com getter e setter. 33/42

Getters e Setters IV #i n c l u d e <i o s t r e a m > #i n c l u d e <s t r i n g > u s i n g namespace s t d ; c l a s s D i a r i o C l a s s e { s t r i n g n o m e D a D i s c i p l i n a ; p u b l i c : v o i d s e t N o m e D a D i s c i p l i n a ( s t r i n g name ){ n o m e D a D i s c i p l i n a = name ; } s t r i n g g etnomedadisciplina ( ) { r e t u r n n o m e D a D i s c i p l i n a ; } v o i d mostramensagem ( ) { c o u t << " Seja Bem - vindo ao Diario de Classe de" << g etnomedadisciplina ( ) << e n d l ; } // fim da função } ; // fim da classe 34/42

Getters e Setters V i n t main ( ) { s t r i n g nome ; D i a r i o C l a s s e meudiario ; cout << "Digite o nome da disciplina : " ; g e t l i n e ( cin, nome ) ; meudiario. s e t N o m e D a D i s c i p l i n a ( nome ) ;... meudiario. mostramensagem ( ) ; } r e t u r n 0 ; 35/42

Getters e Setters VI Para garantir a consistência dos valores dos atributos, convém realizar validação de dados nos getters e setters O valor passado como parâmetro é adequado em relação ao tamanho ou faixa de valores? Temos que definir se permitiremos valores negativos, tamanho máximo para vetores, etc. Se um parâmetro for inadequado, devemos atribuir um valor padrão ao atributo Zero, um, NULL,, etc. 36/42

Getters e Setters VII Notem um detalhe interessante: Quando usamos a classe string, podemos fazer atribuição direta entre os objetos, utilizando o operador de atribuição De fato, podemos fazer atribuição direta entre quaisquer objetos de uma mesma classe Cuidado: pode causar erros se entre os atributos possuirmos ponteiros para memória alocada dinamicamente. Diferentemente do que ocorre com vetores de caracteres, que precisam da função strcpy. 37/42

Getters e Setters VIII Como fica o diagrama de classe UML para a classe DiarioClasse agora que temos um getter e um setter? 38/42

Exercicio I Implemente a classe Retângulo e as operações para calcular a área e perímetro. 39/42

Exercicio II #i n c l u d e <i o s t r e a m > u s i n g namespace s t d ; c l a s s Retangulo { d o u b l e a l t u r a, base ; p u b l i c : v o i d s e t A l t u r a ( d o u b l e m a l t u r a ){ a l t u r a = m a l t u r a ; } v o i d s e t B a s e ( d o u b l e m base ){ base = m base ; } d o u b l e g e t A l t u r a ( ) { r e t u r n a l t u r a ; } d o u b l e getbase ( ) { r e t u r n bas ; } d o u b l e c a l c u l a A r e a ( ) { r e t u r n g e t A l t u r a ( ) getbase ( ) ; } d o u b l e c a l c u l a P e r i m e t r o ( ) { r e t u r n 2 g e t A l t u r a ( ) + 2 getbase ( ) ; } } ; // fim da classe 40/42

Exercicio III i n t main ( ) { Retangulo R ; d o u b l e m base, m a l t u r a ; c o u t << " Digite a base e altura do retangulo : " ; c i n >> m base >> m a l t u r a ; R. s e t B a s e ( m base ) ; R. s e t A l t u r a ( m a l t u r a ) ; cout << "Area: " << R. c a l c u l a A r e a ( ) << e n d l ; cout << " Perimetro : " << R. c a l c u l a P e r i m e t r o ( ) << e n d l ; r e t u r n 0 ; } 41/42

FIM 42/42