Baixe o app para aproveitar ainda mais
Prévia do material em texto
1ºAula Introdução à programação orientada a objetos Objetivos de aprendizagem Ao término desta aula, vocês serão capazes de: entender o que é a Programação Orientada a Objetos; conhecer o que é uma Classe; saber o que é um atributo e um método. Olá, pessoal, tudo bem? Bem-vindos à disciplina de Programação Orientada a Objetos. Nesta primeira aula, vamos relembrar o que vimos nas matérias anteriores sobre a Programação Orientada a Objetos, a fim de relembrar o que foi estudado, antes de aprofundarmos mais ainda em nossos estudos. Qualquer dúvida entre em contato via quadro de avisos. E lembrem-se de fazer as atividades desta aula. Estaremos sempre a sua disposição. Boa aula! Bons estudos! Bons estudos! 63 Programação Orientada a Objetos 6 1 - Introdução à programação orientada a objetos 2 - Do paradigma estruturado à orientação a objetos 1 - Introdução à programação orientada a objetos Vocês devem ter ouvido falar sobre a Programação Orientada a Objetos nas disciplinas de Engenharia de Software II (no campo da análise) e em Linguagem de Programação II. Até aí, vocês tiveram um contato básico sobre esse paradigma de programação. Antes de aprofundarmos em nossos estudos, vamos relembrar o que vimos anteriormente. Antes de começarmos a nossa revisão, vamos perguntar: Você sabe o que é o paradigma estruturado? O paradigma estruturado é a forma tradicional de se fazer a programação. Ele organiza a programação em variáveis e em funções. Assim, podemos modularizar os nossos programas usando as funções. Até aqui, a maioria do tempo em que vocês se dedicaram para programar neste curso, foram em linguagens que suportam o paradigma estruturado. A Programação Orientada a Objetos (também denominada de POO) começou a ser discutida nas décadas de 1960 e 1970, com as linguagens pioneiras SmallTalk e Simula, mas, por muito tempo, a programação estruturada dominou a Ciência da Computação. Na década de 1980, houve uma ascensão da modelagem de banco de dados, através de autores como Peter Chen e Edgard Codd. Com isso, os projetistas passaram a ter mais ferramentas de modelagem de dados. Esse novo mundo de ferramentas de modelagem de dados levou a evidência de que o paradigma procedural colocava pouca organização sobre os dados, ou seja, geria os dados de forma débil (LEE; TEPFENHART, 2002). Foi a partir desse ponto que esse paradigma passou a ser mais popularizado. Graças às novas possibilidades que eram possíveis com esse paradigma, mais programadores passaram a procurar aprendê-lo, e mais analistas procuraram aprimorar a análise orientada a objetos (discutida em Engenharia de Software II). Mais linguagens passaram a adotar esse paradigma, seja como complemento ao Paradigma Estruturado (que é o caso do C++, PHP e Python, que permitem que você programe tanto no paradigma estruturado quanto no paradigma estruturado a objetos), ou como paradigma principal (que é o caso do Java, que adota a POO como a sua base). Na seção a seguir, vamos explicar como a POO pode ser entendida a partir dos conceitos da programação estruturada. 2 - Do paradigma estruturado à orientação a objetos No paradigma estruturado, os dados e as funções são isolados no programa. Não há uma relação entre eles ao Seções de estudo observar as variáveis e as funções, apenas observando a estrutura do programa. Para observarmos a relação entre eles, devemos entender o contexto e a funcionalidade de cada estrutura do sistema. Suponhamos um sistema que manipule os dados de um aluno. Podemos colocar os dados do aluno em um registro, conceito visto nas disciplinas de Algoritmos e Linguagem de Programação. Esse registro vai armazenar um nome, um rgm, as duas notas das provas e a nota do exame. Observem como caria o código de um registro de alunos na linguagem C++: Agora, vamos pensar em uma função que tenha como objetivo calcular a média de um aluno. No paradigma estruturado, devemos criar uma função que receba uma variável com o registro aluno. Observe: O mesmo vale se quisermos calcular a média do exame de um aluno. Observem o código dessa função na linguagem C++: E se quisermos fazer uma função que de na a situação de um aluno? É a mesma coisa. Veja como codi camos isso na linguagem C++: Vamos agora ver como caria um arquivo programa típico em C++, com a declaração das três funções e do registro: 64 7 Observem que ao menos que vocês tenham que analisar o programa na base do seu contexto, não temos como deduzir a relação entre uma variável do tipo Aluno com as suas respectivas funções de manipulação. Nas matérias de Estruturas de Dados, vocês devem ter tido contato com o conceito de Tipo Abstrato de Dados. Ele pode ser entendido como uma coleção bem de nida de dados a serem armazenados, e um grupo de operadores que podem ser aplicados para manipulação desses dados contidos nessa coleção. O registro Aluno e as suas operações se encaixam perfeitamente nesse conceito. Apesar de que, o relacionamento contido entre os dados já esteja no nível satisfatório, temos alguns problemas que os TADs existem na programação estruturada. Um desses exemplos é a possibilidade de inserirmos valores inválidos, diretamente nos valores do registro, como uma nota negativa, por exemplo: x.nota_p1 = -1; Isso é perfeitamente válido na programação estruturada. Não existe uma forma de ocultar o dado para os usuários externos desse registro. Sendo um dos principais problemas que os projetistas viram nesse paradigma. Além disso, a reutilização é prejudicada. Ao menos que escrevamos uma biblioteca contendo a de nição do registro e de suas funções, não existe uma outra forma de reutilizarmos o nosso código. Esses foram alguns dos motivos que motivaram a ascensão da Programação Orientada a Objetos. A partir de agora, vamos mostrar como transformar esse TAD para a Programação Orientada a Objetos. 2.1 - Do registro a classe e a objeto Você viu que um registro é um conjunto de dados contidos em um grupo único. Em um registro, podemos agrupar um conjunto de dados comuns a um conjunto de variáveis, como no exemplo, um conjunto de alunos, que sempre possuem dados comuns entre eles. Uma classe tem o mesmo fundamento. Ela serve para agrupar características comuns entre diferentes variáveis de um programa. A diferença é que em uma classe não agrupamos somente variáveis, mas também funções. Assim, podemos colocar as funções que manipulam um registro para dentro da classe. Aliás, dentro da classe, as variáveis e funções ganham uma nova nomenclatura. As variáveis, que de nem as características da classe, são denominadas de atributos da classe, enquanto que as funções, que de nem o comportamento da classe, ganham o nome de métodos. Assim, podemos transformar o registro Aluno e suas funções relacionadas em uma classe chamada Aluno. Para isso, tomaremos as seguintes diretrizes: • Como migraremos as funções que manipulam um aluno para dentro da classe e essas funções usam os dados de um aluno, que podem ser manipulados de uma forma direta dentro da função (agora chamado 65 Programação Orientada a Objetos 8 de método), removemos a variável do então registro Aluno como argumento dos métodos; • Para indicar que estamos querendo usar um atributo ou método de dentro da instância da classe Aluno, indicamos o atributo ou o método desejado da seguinte maneira: this-><nome>. Onde this tem o papel que estamos usando um membro (um atributo ou método) da própria instância da classe. • Como você viu na aula 08 da matéria de Linguagem de Programação II, devemos indicar qual a visibilidade dos atributos e métodos. Na linguagem C++, declaramos em bloco, indicando o nome do modi cador, seguido pelo sinal de dois pontos. A partir daí, todos os atributos e métodos desse conjunto passarão a ser tratadas como o modi cador criado; • A declaração de atributos e métodos é praticamente a mesma de variáveis e funções. Observe como caria a declaração deuma classe Aluno na linguagem C++: Para usarmos a classe, devemos criar uma variável dessa classe. Na Programação Orientada a Objetos, uma variável de uma classe é chamada de um Objeto. Ela pode representar uma entidade do mundo real, podendo ser um carro, uma geladeira, uma moto, um fogão, etc. Pode representar algo concreto ou uma entidade conceitual, como uma regra de negócio, por exemplo. Ao processo de criação de um objeto é dado o nome de instanciação, quando criamos uma instância de uma classe. Observem como caria: Aluno a; Para usar os atributos e métodos desse objeto, fora da de nição da classe, usamos da mesma forma que fazemos em registros, indicando o nome da variável, seguido por um ponto e pelo nome do método que queremos acessar. Observem: a.nota_p1 = 8; a.nota_p2 = 6; Em nossa matéria, vamos escrever os nossos programas usando a linguagem Java. Ela possui muitas similaridades com a linguagem C++, como veremos nas aulas a seguir. As principais diferenças são: • A declaração da visibilidade dos atributos e métodos é individual, não coletiva; • A indicação que estamos manipulando um membro do mesmo objeto não usa o operador seta, mas sim o operador ponto; • Devemos declarar algum valor ponto de retorno padrão. O método calculaMediaExame foi con gurado para retornar alguma coisa somente quando a média for menor que 7. Assim, não temos nenhum retorno desse método quando o aluno for aprovado. Isso é possível na linguagem C++, mas não é possível na linguagem Java. Por isso, devemos declarar algum retorno. Nesse caso, con guramos para retornar a média normal quando o exame é desnecessário. Observem como caria a declaração da mesma classe Aluno, na linguagem Java: A partir desse ponto, podemos aplicar todos os benefícios e as novas possibilidades que a programação orientada a 66 9 objetos nos proporciona. Essas novas possibilidades veremos nas próximas aulas. Na próxima aula, veremos o que é a Linguagem Java e como instalá-la. Até logo! Lembrem-se: Vocês não estão sozinhos. Estaremos a sua disposição quando vocês tiverem algum problema. Basta nos contatarem usando o Quadro de Avisos ou o Fórum, que estão disponíveis na sua área do aluno. Sempre que precisar, estaremos lá! Retomando a aula Chegamos ao nal da nossa primeira aula. Espera-se que agora tenha cado mais claro o entendimento de vocês sobre a Introdução à programação orientada a objetos. Vamos relembrar? 1 - Introdução à Programação Orientada a Objetos Nesta seção, relembramos alguns tópicos históricos sobre a Programação Orientada a Objetos e a sua evolução vinda da Programação Estruturada. A Programação Orientada a Objetos é uma outra maneira de organizar a programação, que enxerga o programa como um conjunto de classes e objetos, não como um conjunto de variáveis e funções. 2 - Do paradigma estruturado a orientação a objetos Na segunda e última seção, vimos a evolução dos registros e dos Tipos Abstratos de Dados, presentes no paradigma estruturado, para os conceitos básicos da Programação Orientada a Objetos, que são as Classes, Objetos, Métodos e Atributos. BOOCH, Grady JACOBSON, Ivar; RUMBAUGH, James. UML – guia do usuário. Elsevier, Rio de Janeiro. 2005. CORNELL, Gary; HORSTMANN, Cay S.; FURMANKIEWICZ, Edson.et al. Core Java, volume I : fundamentos. 8. ed. São Paulo: Pearson Prentice Hall, 2010. CORNELL, Gary; HORSTMANN, Cay S.; TORTELLO, José Eduardo N. et al. CoreJava 2: fundamentos. São Paulo: Makron Books do Brasil, 2001. DEITEL, H.M. Java: como programar. 8. ed. São Paulo: Pearson Prentice Hall, 2012. LEE, Richard C.; TEPFENHART, William M. UML e C++-Guia prático de desenvolvimento orientado a objeto. São Paulo: Vale a pena ler DEVMEDIA. Análise e projeto orientado a objetos. Disponível em: <http://www.devmedia.com.br/curso/ analise-e-projeto-orientado-a-objetos/336>. Acesso em: 19 out. 2018. Vale a pena acessar Vale a pena Makron, 2002. ENGHOLM JR, Hélio. Engenharia de Software na prática. São Paulo: Novatec Editora, 2010. SCHILDT, Herbert. Java Para Iniciantes - Crie, Compile e Execute Programas Java Rapidamente. 6. ed. Porto Alegre: Bookman, 2015. SEBESTA, Robert W. Conceitos de linguagens de programação. Porto Alegre: Bookman Editora, 2009. Minhas anotações 67
Compartilhar