Baixe o app para aproveitar ainda mais
Prévia do material em texto
LINGUAGEM DE PROGRAMAÇÃO Mauricio Saraiva Introdução a classes, objetos e métodos Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Definir classes, objetos e métodos. � Construir uma classe e seus elementos com auxílio de uma linguagem de programação orientada a objetos. � Criar objetos. Introdução A programação orientada a objetos (POO) é um dos paradigmas mais uti- lizados atualmente no desenvolvimento de sistemas, sendo a linguagem C++ uma das mais conhecidas. Com a linguagem de programação C++, analistas e programadores constroem classes e implementam métodos que permitem construir programas baseados em objetos que representam o mundo real, por meio de características, estados e comportamentos. Neste capítulo, você estudará sobre classes, objetos e métodos no paradigma da POO, bem como conhecerá a implementação desses recursos na linguagem C++. Classes, objetos e métodos Classes Classes são as unidades principais do paradigma de orientação a objetos e servem como modelo ou categoria para um determinado conjunto de obje- tos, isto é, são abstrações que representam as características (propriedades) comuns de todos os objetos que pertencem a elas, bem como definem o seu comportamento (SILVA FILHO, 2010). Como citado, o conceito de classes na orientação a objetos gira em torno da abstração, que é a definição simplificada dos objetos e apresenta informações relevantes para os usuários, porém, esconde detalhes que são irrelevantes para determinado contexto (SEBESTA, 2018). Na Unified Modeling Language (UML), uma classe pode ser representada pelas especificações nome da classe, atributos e métodos, como você pode observar a seguir (BEZERRA, 2015). � Nome da classe: é o identificador da classe e define o nome pelo qual a classe é referenciada, em geral, utiliza-se apenas a primeira letra maiúscula na declaração de uma classe. � Atributos: é o conjunto de características da classe, isto é, os campos que armazenam e definem as propriedades do objeto. Assim como as variáveis, esses campos possuem um tipo, por exemplo, int, float, string, etc. � Métodos: definem o comportamento da classe por meio das operações que ela pode executar, ou seja, compreende as funcionalidades da classe. Como exemplo, considere uma classe que define um retângulo. Nela, atribuímos o nome Retangulo; os atributos altura, largura, borda e cor, que especificam os lados do retângulo; seu tipo de borda e sua cor; e os métodos calcularArea, setAltura e getAltura que definem as operações que podemos realizar nos objetos dessa classe, conforme ilustrado na Figura 1. Figura 1. Classe Retangulo. Introdução a classes, objetos e métodos2 Na Figura 1, os atributos da classe Retangulo possuem um sinal negativo ao lado esquerdo, e os métodos, um sinal positivo. Isso significa que os atributos foram declarados como privados e os métodos como públicos. Você verá mais explicações na sequência deste capítulo. Objetos Na POO, um objeto pode ser definido como uma instância de uma classe, ou seja, os objetos são criados a partir de características e comportamentos que as classes fornecem. Um objeto representa algo do mundo real e, assim como os objetos reais, os objetos de uma classe também possuem características (SILVA FILHO, 2010). Segundo Silva Filho (2010), as características dos objetos de uma classe são: identidade, propriedade e comportamento, como você verá a seguir. � Identidade: todo objeto possui uma identidade única. Apesar de os obje- tos de uma classe seguirem um mesmo padrão, podendo, inclusive, serem iguais, internamente, cada um é identificado de forma independente. � Propriedade: também conhecida por estado, são as propriedades que os objetos possuem. A mudança de estado dos objetos é realizada por meio da atribuição e/ou modificação de valores de seus atributos. � Comportamento: define a forma como os objetos reagem às mudanças de estado que ocorrem. Na orientação a objetos, a forma como os objetos interagem entre si se dá pela troca de mensagens, pelas quais as requisições são solicitadas e atendidas utilizando os métodos das classes (SEBESTA, 2018). 3Introdução a classes, objetos e métodos Considere que a classe Retangulo do exemplo anterior poderá produzir somente objetos retângulos; no entanto, cada retângulo pode ter suas próprias propriedades. Assim, com base na sua estrutura, é possível apresentar os exemplos de objetos ilustrados na Figura 2, que apresentam altura, largura, borda e cor diferentes. Figura 2. Objetos da classe Retangulo. 1 2 3 4 Métodos Na POO, um método ou operação é como uma função que pertence a uma classe e pode ser executada pelos seus objetos. A chamada do método é realizada pelo recebimento de uma mensagem, que dispara a sua execução (SEBESTA, 2018). Na linguagem C++, os métodos de uma classe podem receber parâmetros e devolver um retorno. No entanto, esses retornos estão atrelados à classe a qual pertencem, podendo executar operações apenas nos objetos da sua classe. Os métodos que leem os estados dos objetos de uma classe são chamados de acessores (getters), e os métodos que modificam esses estados são conhecidos por modificadores (setters). Ao instanciar uma classe e realizar a chamada de um método, o objeto que faz a requisição não tem acesso aos detalhes da sua implementação, portanto, sabe quais métodos possui e os parâmetros necessários para a sua execução, mas desconhece a forma como o método foi implementado (HORSTMANN, 2005). Outra importante característica dos métodos em uma classe é o encap- sulamento. Com o encapsulamento é possível bloquear o acesso direto aos atributos das classes, permitindo o acesso apenas por meio dos métodos que podem ler ou gravar/modificar valores (HORSTMANN, 2005). Introdução a classes, objetos e métodos4 Saiba mais sobre o conceito de encapsulamento na POO acessando o link a seguir. https://goo.gl/Jg2J1D Construção de classe com auxílio da linguagem de programação orientada a objetos Na seção anterior, você viu a estrutura da classe Retangulo, composta por seus atributos e métodos. Nesta seção, vamos construir a classe Retangulo e implementar seus métodos assessores e modificadores com auxílio da lin- guagem de programação C++. Inicialmente, vamos criar dois arquivos, Retangulo.hpp e Retangulo.cpp. Esses arquivos representam, respectivamente, a classe Retangulo, os atributos e os protótipos de seus métodos (cabeçalho com a extensão hpp) e a imple- mentação de suas funções (corpo com a extensão cpp). Arquivo Retangulo.hpp Este arquivo é a própria implementação da classe Retangulo. Nele ficam apenas os atributos e os protótipos de seus métodos. Apesar de não ser obrigatório, em geral se nomeia esse arquivo com o mesmo nome da classe, utilizando a extensão hpp que indica um arquivo de cabeçalho. Esse arquivo será incluído pelo arquivo que implementa as funções por meio da diretiva include do C++. Na compilação do arquivo executável, o compilador atua como se os arquivos fossem apenas um, no entanto, a separação facilita a organização e o entendimento do código-fonte (SILVA FILHO, 2010). 5Introdução a classes, objetos e métodos https://goo.gl/Jg2J1D A implementação da classe Retangulo é apresentada a seguir. Na linha 1, a instrução class, que indica a criação de uma classe, é apre- sentada, seguida da palavra Retangulo, representando o nome da classe. Todo o conteúdo da classe precisa ser englobado pelas diretivas de bloco {}, com a colocação de um ponto e vírgula no final (linha 18). Nas linhas 2 e 8, são apresentados os modificadores de acesso private e public. Essas instruções indicam a visibilidade dos atributos e dos métodos da classe. Nesse caso, os atributos são definidos como privados, e os mé- todos, como públicos. Dessa forma, implementa-se o encapsulamento dos atributos e, assim, é possível atender a uma das melhores práticas da POO, pois restringe-se o acessoaos atributos apenas por meio de seus métodos assessores e modificadores. As instruções entre as linhas 9 e 17 representam os protótipos dos métodos da classe. Esses protótipos apresentam apenas a declaração das funções e não devem incluir as suas implementações. Note que cada declaração de método possui um caractere ponto e vírgula no final. Introdução a classes, objetos e métodos6 Arquivo Retangulo.cpp Este arquivo contém as implementações dos métodos da classe Retangulo. A inclusão do arquivo de cabeçalho, que define a classe, é necessária e realizada por meio da instrução include, apresentada na linha 1. A partir da linha 3 o arquivo implementa os métodos declarados na classe. Cada método da classe deve conter o símbolo ::, que significa operador de resolução de escopo. Esse operador deve ser utilizado nos métodos para indicar a qual classe eles pertencem. Como citado anteriormente, o acesso aos atributos da classe é realizado pelos métodos acessores e modificadores. Na implementação, esses métodos são precedidos pelas palavras get e set, que significam consulta e modificação, respectivamente. Dentro desses métodos, os atributos da classe podem ser identificados pela instrução this->. Apesar de não ser obrigatório, utilizar essa nomenclatura faz parte das convenções da POO. No exemplo do atributo altura, implementamos um método getAltura, que retorna o valor altura de um objeto (estado), e o método setAltura, que recebe o valor por parâmetro para defini-lo. O último método implementado neste arquivo é o calcularArea, que retorna a área do retângulo dos objetos da classe. Você pode notar que esse método não recebe parâmetros, como geralmente teríamos em uma função implementada, por exemplo, pelo paradigma estruturado. Isso é possível porque os métodos pertencem à classe, portanto, possuem conhecimento dos estados dos seus objetos. No método calcularArea, o acesso pode ser realizado diretamente pelos atributos da classe ou por meio dos métodos acessores, conforme apresentado na linha 36. Para isso, ele precisa incluir o arquivo de declaração da classe — Retangulo.hpp. 7Introdução a classes, objetos e métodos Introdução a classes, objetos e métodos8 Criar objetos de classes Uma vez que a classe Retangulo já foi construída e que seus métodos assessores e modificadores já foram implementados, é possível instanciar objetos dessa classe. Para isso, vamos criar outro arquivo, que conterá o método main para executar o programa. Neste exemplo, vamos nomear o novo arquivo como retanguloMain.cpp. Este arquivo precisa incluir o arquivo Retangulo.cpp, para que possamos instanciar a classe Retangulo e, então, criar objetos a partir dela. Na POO, quando uma função instancia uma classe, diz-se que ela é sua cliente. Sendo cliente de uma classe, a função pode criar objetos e acessar os métodos que ela disponibiliza para seus clientes. Como já apresentado, precisamos instanciar a classe Retangulo para criar os objetos. A instanciação da classe é realizada pela declaração de uma variável ao lado do nome da classe, o que faz um objeto da classe ser criado, permitindo, assim, utilizar seus métodos, conforme apresentado a seguir. Para exemplificar a criação de objetos, veja a seguir o programa que roda o método principal. Esse programa cria quatro objetos da classe Retangulo, modifica o estado dos objetos e imprime seus valores. 9Introdução a classes, objetos e métodos Arquivo retanguloMain.cpp Introdução a classes, objetos e métodos10 O resultado da execução do programa é ilustrado na Figura 3. Figura 3. Objetos da classe Retangulo. Esse programa implementa uma função chamada imprimeRetangulo entre as linhas 6 e 12. Essa função recebe um ponteiro de objeto da classe Retangulo e imprime o endereço desse objeto junto aos demais atributos e à área. Os objetos ret1 e ret2 possuem os mesmos valores, contudo, são objetos diferentes, pois ocupam endereços distintos de memória. O objeto ret1 está endereçado em 0x70fe30 e o objeto ret2 está endereçado em 0x70fe20. Já os objetos ret3 e ret4 foram declarados com alocação dinâmica de memória, sendo que o objeto ret4 aponta para o endereço de memória de ret3. Isso significa que eles apontam para o mesmo objeto, referenciado pelo endereço 0x261590, e que qualquer modificação feita em algum deles irá refletir em ambos. 11Introdução a classes, objetos e métodos 1. Com base no paradigma de orientação a objetos, identifique a alternativa que apresenta corretamente o conceito de classe. a) Classes são abstrações que representam o estado e o comportamento de determinados objetos. b) Classes são paradigmas de programação orientada a objetos da linguagem C++. c) Classes instanciam objetos com o objetivo de criar um modelo real. d) Uma classe é cliente de um objeto quando esse objeto pertence a essa classe. e) Classes trocam mensagens entre si por meio de seus métodos. 2. Marque a alternativa correta em relação aos objetos que podem ser criados na linguagem C++. a) Objetos são instâncias de classes e possuem nome, atributos e métodos. b) Um objeto é criado quando uma determinada classe é instanciada. c) Dois objetos são iguais quando o estado deles é o mesmo. d) Objetos efetuam trocas de mensagens com as classes as quais pertencem. e) Por mais que sejam da mesma classe, objetos não se comunicam diretamente. 3. Considerando o conceito de métodos na programação orientada a objetos, marque a alternativa correta. a) São funções que podem ser executadas por qualquer classe do sistema. b) Encapsulam o código-fonte evitando a cópia indevida da propriedade intelectual. c) Acessam e/ou modificam as mensagens trocadas entre os objetos. d) Realizam operações apenas nos objetos da própria classe. e) São instâncias da classe a que pertencem. 4. De acordo com código escrito em C++ apresentado a seguir, indique a alternativa correta. a) Nome, rg e setNome são atributos públicos da classe. b) Nome, rg e setNome são objetos da classe Pessoa. c) O método main pode imprimir diretamente o atributo nome porque é público. d) O método setNome é obrigatório porque os atributos são públicos. e) O código não executa porque existe um erro de compilação. Introdução a classes, objetos e métodos12 BEZERRA, E. Princípios de análise e projeto de sistemas com UML. 3. ed. Rio de Janeiro, Campus, 2015. HORSTMANN, C. Conceitos de computação com o essencial de C++. 3. ed. Porto Alegre: Bookman, 2005. SEBESTA, R. W. Conceitos de linguagens de programação. 11. ed. Porto Alegre: Book- man, 2018. SILVA FILHO, A. M. Introdução à programação orientada a objetos com C++. Rio de Janeiro: Elsevier, 2010. 5. Considere a classe Pessoa implementada em C++ apresentada a seguir e indique a alternativa que representa corretamente atribuição de “Maria” ao atributo nome, depois da declaração da variável *p que realiza a instância da classe. a) p.nome= “Maria” b) p:nome= “Maria” c) p::nome= “Maria” d) p..nome= “Maria” e) p->nome= “Maria” 13Introdução a classes, objetos e métodos Encerra aqui o trecho do livro disponibilizado para esta Unidade de Aprendizagem. Na Biblioteca Virtual da Instituição, você encontra a obra na íntegra. Conteúdo:
Compartilhar