PraticOO – Método para o Aprendizado de Orientação a

Propaganda
PraticOO – Método para o Aprendizado de Orientação a Objetos por Estudantes de
Engenharia
Carlos Henrique Rodrigues Cardoso1
Abstract  The Oriented-Object languages, such as Java,
C++ or C# ( read C Sharp ) have been growing fast, in
particular,
at
the
solutions
generation
for
telecommunications and electronics. The learning of the
Oriented-Object techniques needs a high abstraction level .
Therefore, the students, most of the times, have great
difficulty in learning and using these techniques in a
consistent way and how to apply them in the projects’
development. This paper shows a practical method of
teaching the electrical engineering students the OrientedObject techniques with the focus on Electronics and
Telecommunications. The purpose of PraticOO method is to
permit the migration from structured paradigm to object
oriented paradigm.
Index Terms  Object-Oriented Paradigms, ObjectOriented Programming, Structured Paradigms, Java.
Resumo  O uso de linguagens Orientadas a Objetos, como
Java, C++ ou C# (lê-se C Sharp) vem crescendo
rapidamente, em particular na geração de soluções para
telecomunicações e eletrônica. O aprendizado das técnicas
de Orientação a Objetos necessita de um alto grau de
abstração. Em virtude disso, os alunos, na maioria das vezes,
têm grande dificuldade de aprender e utilizar essas técnicas
de forma consistente, bem como aplicá-las no
desenvolvimento de projetos. Este artigo apresenta um
método prático de ensino das técnicas de Orientação a
Objetos para alunos de engenharia elétrica com ênfase em
Eletrônica e Telecomunicações. A intenção do método
PraticOO é permitir uma migração do paradigma estruturado
para o orientado a objetos.
Termos de Índice  Paradigmas de Orientação a Objetos,
Programação Orientada a Objetos, Paradigma Estruturado,
Java.
INTRODUÇÃO
Muita pesquisa tem sido feita nos últimos anos no sentido de
encontrar caminhos que facilitem o aprendizado das técnicas
de Orientação a Objetos. Em [1] é apresentado um conjunto
de orientações para o ensino de Orientação a Objetos. Estas
orientações foram seguidas na criação do método PraticOO.
Em [2] são apresentadas as justificativas da escolha da
linguagem Java como sendo a que reúne as melhores
características para o aprendizado de orientação a objetos.
Esta pesquisa está sendo conduzida no sentido de apresentar
técnicas pedagógicas que facilitem o aprendizado de
Orientação a Objetos por alunos de engenharia eletrônica e
de telecomunicações, que em função da tecnologia devem
ser capazes de desenvolver projetos de software tanto
Estruturados como Orientados a Objetos, aproveitando o
máximo de cada técnica quando apropriado. Os alunos que
utilizaram o método PraticOO são alunos que obtiveram
formação em desenvolvimento de projetos estruturados
utilizando a linguagem C, muito comum em equipamentos
eletrônicos. Em [3] é colocado o problema da “contaminação
de paradigmas” que ocorre quando diferentes metodologias
são misturadas ou combinadas e os benefícios de uma ou
outra metodologia são perdidos. Porém, em Engenharia
Eletrônica e de Telecomunicações o aluno deve conhecer as
duas metodologias - Estruturada e Orientada a Objetos - e
deve utilizá-las adequadamente. Não é possível determinar
qual é a melhor metodologia. Este trabalho de pesquisa se
iniciou em 2002, no curso de Engenharia Elétrica do Inatel,
na disciplina de Computação III.
Introduz-se no próximo tópico as principais dificuldades
encontradas no aprendizado de Orientação a Objetos
apresentadas em outras pesquisas e confirmadas durante o
desenvolvimento da pesquisa. Em seguida apresenta-se o
método PraticOO. Ao final do artigo apresentam-se o tópico
com as conclusões e trabalhos futuros, e finalmente
apresentam-se as referências bibliográficas utilizadas no
desenvolvimento da pesquisa.
Em [4] destaca-se a importância do uso de uma
ferramenta adequada para o ensino de orientação a objetos.
Nesta pesquisa foi utilizada a ferramenta Eclipse
(www.eclipse.org) em conjunto com o plugin EclipseUML
(www.omondo.com) por serem gratuitas, o que permite o
uso no laboratório ou em casa e pela facilidade no uso. O
Eclipse permite ainda a inclusão de outros plugins, o que o
torna uma ferramenta extremamente versátil. O Eclipse
possui ainda várias características do BlueJ[4], com a
vantagem de ser também uma ferramenta de uso
profissional. O uso de uma ferramenta é fundamental para a
compreensão da orientação a objetos por permitir a
visualização de diagramas que orientam o uso das técnicas.
1
Carlos Henrique Rodrigues Cardoso, Inatel - Instituto Nacional de Telecomunicações – ICC – Inatel Competence Center - DCOM - Departamento de
Computação, Av. João de Camargo, 510, 37.540-000, Santa Rita do Sapucaí, MG, Brazil, caí[email protected]
PRATICOO – TÉCNICAS DE ENSINO DE
ORIENTAÇÃO A OBJETOS
Problemas e soluções já foram experimentadas
indicando caminhos para o aprendizado de Java e
orientada a objeto[1], e uma das conclusões é o ensino
dos conceitos de objeto antes de conhecer uma
linguagem orientada a objetos[5]. O método PraticOO foi
desenvolvido pensando em alunos de engenharia
eletrônica e de telecomunicações que já possuem
conhecimento de programação estruturada, no caso
utilizando C. A base da metodologia consiste em
apresentar um projeto não trivial do ponto de vista de
orientação a objetos, mas que se inicie de um projeto
estruturado e vá a cada fase da migração acrescentando
as características da orientação a objeto, justificando
assim as suas vantagens, apresentando quais tipos de
projeto se beneficiam de uma ou outra metodologia. A
meta da migração é atingir um projeto orientado a
objetos utilizando o padrão Model-View-Control
(MVC)[6]. O encapsulamento é feito, inicialmente,
isolando-se a parte visual do projeto; em seguida é
definido o modelo e, finalmente, é introduzida a classe
de controle. A apresentação da Orientação a Objetos é
feita sempre utilizando código em Java; as classes são
criadas e o sistema deve ser executado desde a primeira
versão. É importante ressaltar que cada fase é
desenvolvida em código e apresentada no diagrama de
classes. Em um determinado momento esta seqüência é
invertida, ou seja, primeiro o diagrama e em seguida o
código, uma vez que esta é a forma de desenvolver
orientado a objetos. A seguir são apresentados os passos
do método:
1. Escolha o projeto que será desenvolvido e dê
um nome a esse projeto. Para alunos de
engenharia eletrônica/telecomunicações são
utilizados projetos de linha de comando porque
o uso de interfaces gráficas tira o foco da
orientação a objetos[1]. Deve-se também
aproveitar para apresentar a orientação no
problema (usado em projetos orientados a
objetos) ao invés da orientação na solução
(usado em projetos estruturados)[3].
2. Desenvolva junto com os alunos a versão
estruturada do projeto. É interessante neste
caso utilizar do conhecimento existente, como
por exemplo a construção de fluxogramas.
Todo o código estará em uma única classe que
possui o nome do projeto. Além do método
main, é interessante criar métodos que façam
escrita em vídeo e principalmente leitura de
teclado. A leitura de teclado em Java é bastante
complexa; isso deve ser apresentado sem se
detalhar o uso de classes e objetos.
3. Crie classes com métodos estáticos. O
gerenciamento de memória não é um conceito
4.
5.
6.
7.
8.
muito utilizado em projetos estruturados. Em C
seria necessário utilizar as funções malloc para
alocar memória e free para retornar a memória
alocada. Em linguagens orientadas a objeto os
objetos são criados e destruídos todo o tempo.
É importante definir uma classe estática que
receberá os métodos de leitura de teclado e
escrita na tela. No nosso caso esta classe é
chamada de Console.
Introduza o conceito de criação de objetos com
o operador new. O uso racional da memória
disponível no sistema é muito crítico em
sistemas embarcados em eletrônica ou
telecomunicações. É importante que o aluno
compreenda a necessidade de racionalizar a
utilização da memória para que os poucos
recursos possam ser aproveitados ao máximo.
O aluno deve desenvolver um projeto como
exercício para a fixação desta teoria.
Introduza os relacionamentos de associação e
dependência. Até este momento, as classes
estavam isoladas. O relacionamento existia,
porém não era apresentado no diagrama. Isto
deve ser feito para que os alunos compreendam
que os objetos existem para atender a um outro
objeto. Nesta fase deve-se iniciar o refactoring
do projeto introduzindo classes que manipulem
a entrada e a saída de informações do projeto.
É interessante que o projeto contemple
relacionamentos 1 para 1 e/ou 1 para muitos.
Os alunos devem desenvolver um exercício
para a fixação da teoria.
Distribua as responsabilidades utilizando
herança. É importante que o projeto contemple
a possibilidade de herança. Apesar do uso de
alocação dinâmica de objetos, é possível que
isto não esteja trazendo grandes vantagens ao
sistema em função do acúmulo de
responsabilidade das classes. O uso adequado
dos recursos é utilizado didaticamente para
auxiliar nas justificativas do uso da
metodologia orientada a objetos. Os alunos
devem desenvolver um exercício para a fixação
da teoria.
Isole o controle, ou seja, a distribuição de
ações. As classes de visualização e modelo
(entidades) são mais fáceis de compreender.
Porém, neste momento, algum método estará
fazendo o controle e pode ser isolado em uma
classe. Este é o momento para se definir o
padrão e apresentar as vantagens de se utilizar
padrões para desenvolvimento de projetos
orientados a objetos.
Apresente o conceito de polimorfismo. Este
conceito é importante para que os alunos
possam compreender a força da orientação a
objetos, mesmo que nem sempre seja
necessária a sua utilização.
9. Crie pacotes que definam o padrão MVC. O
uso de pacotes é muito utilizado na linguagem
Java e oferece um novo nível de abstração. A
ferramenta Eclipse permite o uso de
refactoring
de uma forma totalmente
automática.
Este
recurso
agiliza
a
demonstração do conceito.
Faça sempre uma análise do projeto em desenvolvimento. É
importante estar sempre mostrando para os alunos de onde o
projeto partiu e o porquê de cada passo. Isso irá fortalecer os
conceitos de orientação a objetos sem interferir nos
conceitos de programação estruturada.
relação as funções cin e cout de C++), e a classe Operação
que recebe os parâmetros e executa a operação solicitada.
Note que todos os métodos são estáticos (estão sublinhados).
APLICAÇÃO DO MÉTODO PRATICOO
Os alunos de primeiro ano em engenharia eletrônica e/ou
telecomunicações não possuem ainda conhecimentos
específicos da área que possam ser utilizados como exemplo
de projeto. Deve-se escolher projetos que sejam de
conhecimento dos alunos, utilizando por exemplo o
conhecimento de física ou matemática. Um exemplo
interessante é uma calculadora que pode ser iniciada com
somente 4 operações e evoluir para uma calculadora
científica. Esta evolução permite o ensino do processo de
desenvolvimento incremental diferente do processo cascata
utilizado para desenvolver estruturado[3]. Outros exemplos
de projeto são cálculo de trajetória, conversor de
temperatura, lançamento de projéteis, agenda eletrônica,
entre outros.
Na figura 1 é apresentado o diagrama de classes com
uma única classe e com um único método - o main, que faz
as equações. Se os alunos conhecem lógica, a compreensão
do funcionamento deste código é bastante simples. Neste
momento deve-se analisar os problemas de evolução do
sistema, a definição da arquitetura, manutenção, etc., e
permitir a introdução de novos conceitos. Os métodos cin e
cout fazem respectivamente a leitura de teclado e a
apresentação no display.
FIGURA. 2
CALCULADORA ORIENTADA A OBJETOS COM MÉTODOS ESTÁTICOS.
A figura 3 apresenta o projeto com as mesmas classes;
porém, a classe Operação passou a ser dinâmica e precisará
ser instanciada com o operador new.
FIGURA. 3
CALCULADORA ORIENTADA A OBJETOS COM MÉTODOS DINÂMICOS.
FIGURA. 1
CALCULADORA NÃO ORIENTADA A OBJETOS.
A figura 2 apresenta o projeto com duas novas classes: a
classe Console, que é responsável pela leitura do teclado e
escrita na tela (veja que os nomes dos métodos fazem
A figura 4 apresenta a informação de relacionamento e
permite apresentar os conceitos de associação e
dependência.
FIGURA. 4
CALCULADORA COM RELACIONAMENTO DE ASSOCIAÇÃO E DEPENDÊNCIA.
Na figura 5, o projeto foi remodelado, diminuindo a
responsabilidade da classe Operação e criando uma classe
para cada operação diferente. A classe Operação passou a
ser abstrata e o método calcular também se tornou abstrato,
sendo necessário que cada classe filha seja responsável pela
execução do método. Neste momento é possível tratar de
polimorfismo dinâmico e estático e introduzir a UML no
projeto de software[7].
FIGURA. 5
CALCULADORA COM RELACIONAMENTO DE HERANÇA.
Na figura 6, o projeto foi remodelado mais uma vez
porque a responsabilidade do controle das informações havia
ficado com a classe CalculadoraMenu. Neste modelo então
as classes CalculadoraMenu e a Console fazem parte do
pacote View; a classe Controle corresponde ao Control e as
demais classes correspondem a Model.
FIGURA. 6
CALCULADORA UTILIZANDO O PATTERN MVC.
CONCLUSÕES
O aprendizado de Orientação a Objetos tem se tornado um
desafio para professores e alunos. Por se tratar de um
raciocínio muito abstrato, torna-se difícil a compreensão e a
justificativa clara da sua utilização para os alunos. Porém,
com o aumento da complexidade e distribuição dos sistemas,
torna-se premente o uso de técnicas, em particular a
orientação a objetos, que permitam o uso das características
da engenharia com análise, projeto, acompanhamento em
desenvolvimento de software.
O método apresentado neste artigo foi aplicado em 65
alunos do primeiro ano de graduação em Engenharia Elétrica
que não haviam tido contato com Orientação a Objetos ou
com a linguagem Java. Os resultados obtidos mostraram que
é possível introduzir novas técnicas em grupos que já
conhecem programação estruturada/procedural utilizando-se
métodos práticos que façam a conexão entre o conhecimento
já dominado e novas técnicas a serem aprendidas.
Os trabalhos futuros na utilização do método
incluem a incorporação de atividades de laboratório que
incentivem ao exercício prático do método em projetos
diferentes, em particular em projetos em Java para aparelhos
de celular (J2ME – Java 2 Micro Edition), nos quais as
condições de baixos recursos de memória e processamento
são próximos da realidade enfrentada no desenvolvimento.
Além disso pretende-se realizar experimentos com a
linguagem C++ e comparar as dificuldades no aprendizado
utilizando uma linguagem não tão bem comportada como
Java.
REFERÊNCIAS
[1]
Kolling, M., Rosenberg, J., “Guidelines for Teaching Object
Orientation with Java”, published in The Proceedings of the 6th
conference on Information Technology in Computer Science
Education (ITiCSE ,2002), Canterbury, 2001.
[2]
Blumenstein, M. “Experience in Teaching Object-Oriented Concepts
to First Year Students with Diverse Backgrounds”, Proceedings of the
International Conference on Information Technology; Coding and
Computing(ITCC’04), IEEE, 2004
[3]
Gerber, A., Cloete, E., “Teaching Objected-oriented Systems
Development to Structurally Exposed Students”, Proceeding of the
17th Conference on Software Engineering Education and Training
(CSEET’04), IEEE, 2004
[4]
Kolling, M., Quig, B., Patterson, A. Rosenbeg, J., “The BlueJ system
and pedagogy”, published in the Journal of Computer Science
Education, Special Issue o Learning and Teaching Object Technology,
Vol 13, No. 14, December 2003.
[5]
Blumenstein, M. “Strategies for Improving a Java-based, First Year
Programming Course”, Proceedings of the International Conference
on Computers in Education(ICCE’02) IEEE,2002
[6]
Gama, Erich et. al., “Design Patterns”, Addison Wesley Profesional
Comuting Series, 1994
[7]
Cardoso, Caique (pseudônimo de Cardoso, Carlos Henrique
Rodrigues) ,“UML na Prática – Do Problema ao Sistema”, Ciência
Moderna, 2003.
Download