• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

JoaoRodrigues

POO e Outras

15 mensagens neste tópico

Esclareçam-me uma coisa. Para que serve a programação orientada a objectos? Qual a vantagem sobre por exemplo Pascal (não sei como se chama este tipo de linguagem).

Tipo, estou a tentar aprender Python mas uma coisa que me confunde é: para que raio servem as classes? Serão tipo grupos de variáveis? Para que servem ao fim ao cabo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esclareçam-me uma coisa. Para que serve a programação orientada a objectos? Qual a vantagem sobre por exemplo Pascal (não sei como se chama este tipo de linguagem).

Tipo, estou a tentar aprender Python mas uma coisa que me confunde é: para que raio servem as classes? Serão tipo grupos de variáveis? Para que servem ao fim ao cabo...

Pascal é uma linguagem procedimental, ou seja, defines procedimentos ou blocos de código que vão executar sequencialmente. O paradigma de orientação a objectos consiste na criação de objectos, para aproximar a programação ao tipo de problema em questão, por exemplo, imagina o seguinte caso:

Imagina que estás a criar um jogo que com pessoas, todos nós partilhamos um conjunto de características comuns. Assim crias uma classe Pessoa base, que contém várias propriedades (fields), como a cor dos olhos, do cabelo, o peso, a altura, idade, etc... Depois imagina que queres representar um jogador de ténis. Em vez de criares uma classe nova, vais extender a classe de Pessoa que já tinhas criado, e assim quando alteras a classe base da Pessoa, a classe do jogador de ténis também é alterada automaticamente tendo em conta as novas caracteristacas da pessoa.

Se quiseres posso deixar código para perceberes melhor estes conceitos. Foi uma explicação muito superficial e só abordei algumas das vantagens da programação com classes. Espera que os gurus desta paradigma passem por aqui e te dêm respostas mais detalhadas. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hm, então uma classe é digamos que uma maneira de alterar as caracteristicas de mil variaveis pertencentes a classe "at-once" ? De resto, o género de programação é igual ou tem as suas nuances?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

trata-se de uma metodologia de programação, à qual estão ligados princípios como o encapsulamento, herança, polimorfismo, etc. e onde se a organização da aplicação é feita em função dos tipos de dados, os objectos.

não conheço Pascal, mas não deve permitir herança, por exemplo, o C não tem polimorfismo nem mecanismos que obriguem a respeitar o encapsulamento.

a classe, é uma estrutura de dados que procura representar um "objecto" (uma lista, um par, uma pessoa, um carro, etc.), contendo os atributos que o caracterizam (acabam por ser "grupos de variáveis"). o objectivo da classe é encapsular os objectos, disponibilizando apenas meios para efectuar as operações que precisamos/permitimos sobre eles, sem permitir actuar directamente sobre os seus atributos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Há várias implementações de Pascal que suportam POO, Delphi, FreePascal...

Quanto à vantagem da programação orientada a objectos, é como te disseram em cima. O código torna-se mais "simples", é uma aproximação maior à interactividade real que existe entre entidades e objectos. O que tu fazes é pensar nas classes que vais precisar e depois de a criar não precisas de te preocupar como está a funcionar internamente, apenas precisas de saber o resultado final dos métodos da mesma ( especialmente bom para reutilizar código e/ou dividir tarefas entre várias pessoas ).

Não precisas de fazer código para agir sobre as classes, pedes ao objecto criado para usar os métodos (que já crias-te) que permitem agir sobre ele.

Por exemplo em C podes criar uma estrutura Pessoa que contém o nome e outras informações sobre ela. Mas para agir sobre ela terás que criar funções há parte para tudo. Numa linguagem orientada a objectos essas funções são chamadas pelo objecto em si. Para ler o nome a uma pessoa seria por exemplo:

    Rui.getNome(); 

Pode parecer que o trabalho no fim é o mesmo. As funções tem que ser criadas na mesma e tem. A grande vantagem (para mim), encontra-se na leitura do código e na sua reutilização. Olhar para o código e ver os métodos a ser chamados pelo objecto torna a leitura muito mais natural.

Reutilizar código é também muito mais simples. Se tens uma classe pessoa a funcionar, sempre que precisares de fazeres um programa que use pessoas, é só incluir a classe que fizes-te e tens a certeza de ter uma pessoa já com todas as operações a funcionar.

A herança torna-se importante neste caso. Imagina que tinhas um trabalho para gerir os empregados de uma empresa, precisam de nome, morada tal como as pessoas, aqui ves a aproximação ao real. Precisam de coisas como as pessoas porque eles são pessoas. O que tinhas a fazer aqui era fazer uma classe Empregado que herdava da classe Pessoa, tudo o que Pessoa tem empregado também irá ter. Só precisas de adicionar variáveis como salário, e os métodos extra que queres que o empregado tenha e tens uma classe para criares os empregados todos que quiseres.

Isto torna-se ainda mais importante quando usas código que não foi feito por ti. Precisavas de usar pessoas e um colega teu tinha criado essa classe. Só precisavas de incluir ou importar a classe, e tava feito, tinhas um novo tipo de variável para usar, com tudo já feito mesmo sem teres de te preocupar como funcionava internamente.

Existem muitos mais detalhes, sobre as classes mas estes são, para mim, as coisas mais importantes. Na internet deves encontrar muitos tutoriais que te explicam isso em relação ao Python, eu como nunca usei Python não posso especificar nenhum.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

FreePascal é um editor e compilador de Pascal, logo não suporta POO.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

FreePascal é um editor e compilador de Pascal, logo não suporta POO.

No site não diz isso.

Open source compiler for Pascal and Object Pascal

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E? Contínuo a ter razão, não é uma linguagem, é um editor e um compilador. Object Pascal sim, suporta objectos.

Não é por nada, mas fui obrigado a programar Pascal em free pascal durante 1 ano e meio..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E? Contínuo a ter razão, não é uma linguagem, é um editor e um compilador. Object Pascal sim, suporta objectos.

Não é por nada, mas fui obrigado a programar Pascal em free pascal durante 1 ano e meio..

Ok, tens razão, mas ele também tem parte. :P Anyway, tenho pena desse ano e meio. :)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu só disse que o FreePascal suporta OOP pelo que diz no site deles até suporta 2 formas a do Turbo Pascal (não sabia sequer que suportava POO) e a do Object Pascal.

Warrior:

Eu já não programo em Pascal há uns 5 anos, como foi trabalhar com o FPC? Pelos testes que tenho visto na net os programas são bastante rápidos, umas 5 mais rápidas acho eu). Depois de trabalhar em c não achava muita piada à sintaxe do Turbo Pascal, no Free Pascal mudou alguma coisa ou continua igual?

Sorry pelo Off Topic.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não posso comparar a velocidade do executável porque só trabalhei com um deles, mas pelo que vi do Turbo Pascal e do Free Pascal pode-se dizer que a diferença, a nivel do editor, é mínima.

se não gostavas da sintaxe do Pascal, não importa onde o programas, se em Turbo se em Free.

Tens que começar a distinguir o que é uma linguagem, o que é um editor e o que é um compilador.

Free Pascal e Turbo Pascal são editores (e compiladores, pelo menos o Free também é) mas a linguagem é rigorosamente a mesma. (por vezes há ligeiras diferenças, mas isso depende da forma como o compilador foi programado).

Se eu te dissesse que não gostava da sintaxe de C quando programava no Vi, e te perguntasse se a sintaxe no eMacs era melhor, não fazia sentido. É a sintaxe de C em ambos os casos. Até podes fazer um programa no Turbo Pascal e compilá-lo em Free Pascal.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando me referi a sintaxe devia tar ali Object Pascal lol Mas já tive a dar uma vista de olhos e continua não me dizer muito.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmm, ok pessoal, acho que já percebi. Por exemplo, apesar de eu poder fazer um programa em Python estruturado tal como em Pascal, tenho a oportunidade (e dai a vantagem) de o tornar mais legível e prático ao usar classes e afins não é?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmm, ok pessoal, acho que já percebi. Por exemplo, apesar de eu poder fazer um programa em Python estruturado tal como em Pascal, tenho a oportunidade (e dai a vantagem) de o tornar mais legível e prático ao usar classes e afins não é?

Sim e não, depende da situação. Vou-te dar um exemplo. Imagina que tens um programa que te mostrar todas as pessoas de uma família de 4, todas iguais, e alterar certos atributos.

Numa escrita "normal" (procederamental (como se escreve isto?)):

jose = {"altura": 150, "cabelo" : "louro"}
manel = {"altura": 150, "cabelo" : "louro"}
lola = {"altura": 150, "cabelo" : "louro"}
lolita = {"altura": 150, "cabelo" : "louro"}

manel["altura"] = 160

print manel["altura"]
print jose["altura"]
print lola["altura"]
print lolita["altura"]

Em OOP poderias fazer:

class Pessoa:
    def __init__(self, altura, cabelo):
        self.caracteristicas =  []
        self.caracteristicas["altura"] = altura
        self.caracteristicas["cabelo"] = cabelo
    def alterar(self, carac, novo):
        self.caracteristicas[carac] = novo
    def mostrar(self):
        print "\tAltura:", self.caracteristicas["altura"]
        print "\tCabelo:", self.caracteristicas["cabelo"]


class Familia:
    def __init__(self, nomes):
        self.elementos = {}
        for i in nomes:
            self.elementos[nomes[i]] = Pessoa(150, "louro")

    def mostrar(self):
        for i in self.elementos:
            print "Nome: "+i
            self.elementos[i].mostrar()

    def alterar(self, nome, carac, novo):
        self.elementos[nome].alterar(carc, novo)

familia = Familia(["jose", "manel", "lola", "lolita"])
familia.mostrar()
familia.alterar("jose", "altura", 178)
familia.mostrar()

Isto tem vantagens caso tenhas milhões de famílias. Para criares 1000 familias assim de rajada com os mesmos nomes:

familias = []
nomes = ["jose", "lola", "lolita", "manel"]
i = 0
while i < 1000:
    familias.append(Familia(nomes))
    i += 1

Isto não é propriamente relacionado com OOP, mas podes ver que com um simples Familia(["jose", "manel", "lola", "lolita"]) crias uma familia de 4 pessoas, enquanto que se não tivesses OOP, tinhas que fazer isto tudo à mão, tendo que escrever talvez 10 linhas em vez de 1 por família.

PS: Nenhum do código que escrevi foi testado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora