Dani Posted February 20, 2006 at 05:45 PM Report Share #14746 Posted February 20, 2006 at 05:45 PM Boas Eu tou na faculdade, e no meu curso há programação, e neste momento estamos a dar programação orientada para obejectos. O problema é que em toda a minha vida(de secundário) habituei-me a resolver tudo com um main, umas quantas funções e pouco mais e assim consegui acabar com média de 17 a TLP. Agora derrepente apareçem mil e um conceitos novos, e para ser sincero estou um pouco a anhar. O que gostaria é que me dessem umas luzes sobre este tipo de programação(vantagens e desvantagens) e se possivel, uns tuturiais, ou uns pdfs. Desde já obrigado. Cumps Link to comment Share on other sites More sharing options...
house Posted March 1, 2006 at 10:23 PM Report Share #16270 Posted March 1, 2006 at 10:23 PM Devem-te ter dado um método para fazer e ficaste a ver navios :x Anyway... Compra a bibliografia principal da cadeira e estuda (estudar = 1/3 ler livro + 2 / 3 fazer programas). Link to comment Share on other sites More sharing options...
pedrotuga Posted March 1, 2006 at 11:19 PM Report Share #16282 Posted March 1, 2006 at 11:19 PM epa... POO consiste basicamente separar o tipo de dados e a forma como como são armazenados do algoritmo. Tipo... queres um algoritmo para separar laranjas grandes de laranjas pequenas... ok... em vez disso fazes um algoritmo para separar coisas grandes de coisas pequenas... e depois podes por lá por laranjas, limões, alhos, bogalhos, cebolas... eeheheh.... claro que se quiseres usar o algoritmo para cebolas tens que saber o que é uma cebola... entao defines a classe cebola (um objecto), neste caso tinhas que dizer o que é que consideras uma cebola grande ou uma cebola pequna. Pa.... dizem que é muito bom para organizar o códio e mais não sei o quê.... eu sou da opinião que só se deve usar POO em programação mais avaçada e para projectos de grande dimensão. Isso tem a relevância que tem devido ao facto de ser uma forma eficaz de implementar uma estrutura de dados.. tipo uma pilha ou uma BST. Resumindo e complicando... daquelas cenas boas para dar dores de cabeça.... o pessoal que usa C nem sequer pode usar isso... e o php só suporta classes a partir acho que da versão 4.2 ou lá o que é... por isso como vês, há vida para além das classes Link to comment Share on other sites More sharing options...
Destineo Posted March 10, 2006 at 05:30 PM Report Share #17673 Posted March 10, 2006 at 05:30 PM Antes de mais ... bem vindo ao maravilhoso mundo de programação por objectos. Diz adeus :bye2: aos teus mains de 10 páginas (que foi um dos meus primeiros projectos em OO e me valeu um belo 12 na faculdade), e olá aos teus objectos são mais "espertinhos" e sabem lidar com o que é deles. De inicio podes ficar assustado ?, até podes achar que não vale a pena ? ... Vais partir a cabeça MUITAS vezes até que finalmente vais delirar com o conceito OO 😁. O que é OO ? Imagina que queres programar um sim-estrada :police: (triciclos ou biciletas também funcionam). Em C (filosofia main de 10 páginas), terás algo como : um struct com { struct roda rodas[4]; int velocidade; struct direccao direccao; } main () { // Código para construir uma estrada, enchê-la de structs de carros e controlar a rotação de cada roda, velocidad etc. } Em OO, terás, em vez de structs, classes/objectos ... algo como : class Rodas{ int diametro; int velocidade; int rotacao; .... } class Point{ int x; int y; } class Carro { // varíaveis da class Rodas rodas[4]; int velocidade; Point direccao; //funções da classe mudaDireccao(int x,int y) { //código que altera a direcção, vira as rodas etc. ... } acelera(int quanto) { //código para acelerar, aumentar a velocidade, verificar limite de velocidade etc. ... } trava(int quanto) { //código para travar etc } } class Estrada { Carro carros[1024]; void main() { //Código para criar uma estrada e enchê-lá com carros e mandar cada um dar uma volta. ... } } A diferença aqui é que sem OO tens de controlar tudo, os objectos e como eles agem dentro do teu programa. Em OO, cada objecto sabe como deve efectuar uma certa operação. Portanto o código principal só precisa de mandar o carro acelerar ou mudar de direcção que o objecto Carro sabe que tem de mandar cada uma das rodas andar mais rápido (ou devagar). Portanto quem constroi a "estrada" com os carros basta mandá-los andar que eles tratam de controlar as suas componentes. Isto não quer dizer que os programas ficam mais espertos ?, mas quer dizer que a estrada não precisa de saber que o carro tem 4 rodas que têm de ser aceleradas. A "estrada" (imagina que a estrada é o teu main) basta dizer ao carro para andar mais rápido que o carro trata do resto. Se amanhã passar a existir um carro com 5 rodas, a estrada não precisa de saber isso, continua a mandar o carro andar, e é o carro que agora tem de controlar as 5 rodas. Este é um exemplo um pouco colorido mas é para mostrar que o conhecimento de como as coisas funcionam passam a fazer parte das próprias coisas. Se um dia alguém criar uma classe "auto-estrada", pode simplesmente usar os objectos carro que já existiam para a "estrada" e não precisa de saber como andam, se têm 4,5, ou 7 rodas. Mas OO não é o paraiso e a resposta para todos os problemas. Para algumas situações só vem atrapalhar e é preferivel um programa mais simples com um main de 10 páginas ... mas podes quase sempre fazer a mesma coisa com objectos. Mais uma questão de OO é a possíbilidade de uma classe herdar de outra ... Mas isso, é outra história 😁 - Destineo - Destineo Link to comment Share on other sites More sharing options...
deathseeker25 Posted March 10, 2006 at 06:11 PM Report Share #17677 Posted March 10, 2006 at 06:11 PM Boas, Em primeiro lugar, bem-vindo ao fórum Destineo. Goste bastante da tua explicação sobre POO e acho que finalmente compreendi a 100% o que são classes e qual a sua verdadeira função. No final referiste que classes podem herdar outras classes...como assim? 🙂 Link to comment Share on other sites More sharing options...
house Posted March 11, 2006 at 01:43 PM Report Share #17765 Posted March 11, 2006 at 01:43 PM Um dos muitos objectivos da programação orientada a objectos (como é o caso do JAVA) é facilitar a vida ao utilizador. Uma coisa boa do java é que tens milhares de classes pré-feitas e na maior parte das vezes tens classes para fazer o programa que queres, poupando-te assim muito trabalho 😄 É caso de sacares a documentação do JAVA e logo vês 🙂 Link to comment Share on other sites More sharing options...
Destineo Posted March 14, 2006 at 10:10 AM Report Share #18199 Posted March 14, 2006 at 10:10 AM Oi deathseeker25, Vamos então esclarecer um pouco a questão de herança. A palavra herança quer dizer que há certas coisas que passam de país, para filhos, para netos etc. As classes também podem ter herança de outras classes, onde certas propriedades (variáveis ou métodos) podem ser herdados pelos filhos. Continuando o exemplo do sim-estrada, existem vários veículos que podem circular pelas estradas, como por exemplo ambulâncias, carros de polícia :police:, carros normais, carros tunados 8) etc. Cada uma tem uma particularidade como por exemplo ligar as luzes de emergência na ambulância e nos carros de polícia, acender as luzes neon dos carros tunados, ou até disparar com o turbo dos mesmos. No entanto todos são veiculos que obdecem às mesmas regras e têm propriedade comuns a todos, como o facto de todos terem quatro rodas, um volante, um espelho retrovisor etc. Como é que vamos implementar isto ? ? Em C normal, teriamos provavelmente um "tipo" na struct que nos dizia que tipo de veiculo é que era, e haveria uma função que tinha que ver que tipo de carro era e só permitir os carros policia e ambulâncias executar um método chamado AcendeLuzesEmergencia(). Em OO podemos usar herança para criar uma classe pai (ou mãe, é indiferente porque os compiladores não são esquezitos 😉 ) que tem as variaveis e métodos comuns a todos os veiculos, como por exemplo o acelerar e travar, a velocidade a que o veiculo vai etc. E depois podemos ter classes que herdam desta classe pai mas acrescentam novas funcionalidades, como o AcendeLuzesEmergencia, ou DisparaTurbo. As funções de acelerar e travar, não precisam de ser programadas novamente na classe filho pois o filho tem acesso a tudo o que o pai tem definido (não é bem assim, mas já explico melhor) e ainda às funções que ele tem que não existem na classe pai. Mais ainda, não precisam de nenhuma variável a dizer de que tipo é o objecto, pois quando o criam, criam um objecto do tipo CarroPolicia ou CarroTunado. Usando o objecto Carro do meu último exemplo, podemos criar os seguintes objectos filho(uso notação Java, mas C++ ou C# é muito parecido) : classe CarroPolicia extends Carro{ LuzesEmergencia luzes[2]; void AcendeLuzesEmergencia () { // Ligar as luzes de cima vermelha e azul ... } } Eu agora posso criar um objecto do tipo CarroPolicia e mesmo assim chamar as funções de acelerar e travar embora elas não estejam definidas na classe CarroPolicia mas sim na classe Carro. Esta classe extende a classe Carro adicionando novas luzes e uma nova função. Se criarmos uma classe do tipo Carro, teremos um carro simples que não tem luzes de emergência nem um metodo de acender as mesmas. Este é o funcionamento básico da herança. Existe um conceito que ainda não falei, mas que dei a perceber acima que é, as vezes podemos querer que os nossos filhos não tenham acesso a tudo o que nós temos, ou pelo menos não permitir que seja mexido. E mais, este conceito também se extende às classes vizinhas que são nossas "amigas". Por exemplo, não queremos que o CarroTunado consiga mexer directamente com a velocidade, porque nesta versão do sim-estradas, todos os carros só podem andar a um máximo de 50km/h. Sendo assim, queremos que qualquer alteração à velocidade seja feita somente pela chamada acelerar da classe Carro, porque inclui código que não permite acelerar mais do que os 50km/h. Para isso tornamos a variavel da velocidade com visibilidade private, mas deixar a função acelerar com uma visibilidade public. Assim todas as subclasses podem acelerar só por meio da chamada à função Acelerar da classe pai, porque não lhes é permitido mexer na variável que é private. Por o método acelerar ser public, isto que dizer que qualquer outra classe de fora pode chamar este método do objecto. Ou seja, se a estrada (outra classe) fosse um ser inteligente e queria mandar acelerar e desacelerar os carros que circulam nela, podiam simplesmente chamar a função respectiva. Tanto os métodos como as variáveis da classe podem ter uma visibilidade diferente, o que permite ou não o acesso a essa funções ou variáveis pelos filhos ou amigos. Existe mais um tipo de visibilidade que se chama protected, e que faz com classes fora da familia (classes que não são herdadas) não consigam aceder às funções, mas os filhos consigam. Como sempre, existe MUITO mais para dizer, mas .. fica para uma outra vez 😄 - Destineo - Destineo Link to comment Share on other sites More sharing options...
deathseeker25 Posted March 14, 2006 at 03:17 PM Report Share #18219 Posted March 14, 2006 at 03:17 PM Obrigado Destineo. Finalmente compreendi como pode ser usadas as classes e pelo menos uma das formas de as correlacionar. 😉 Boa explicação! Link to comment Share on other sites More sharing options...
Dani Posted March 17, 2006 at 07:17 PM Author Report Share #18628 Posted March 17, 2006 at 07:17 PM É para agradecer a todos que ajudaram, a mim e não só, a compreender melhor o conceito de programação por objectos. De facto comprovo que após algum tempo de prática, ganha-se a chamada "mecânica da coisa", e os programas ficam mais legiveis, saem mais facilemente e o facto de criarmos o nosso próprio tipo de dados ajuda e muito. De resto é como se custuma dizer primeiro estranha-se depois entranha-se. Cumps Link to comment Share on other sites More sharing options...
house Posted March 17, 2006 at 07:38 PM Report Share #18630 Posted March 17, 2006 at 07:38 PM Para quem nunca ouviu falar de classes... Quando te aparece uma classe à frente é um choque enorme... Eu lembro-me de quando me meteram um programa na primeira aula em que tivemos de fazer classes em Java... Até me passei :Z Mas com treino e esforço... Acaba por se tornar bastante trivial 🙂 Força nisso [ ]'s Link to comment Share on other sites More sharing options...
Destineo Posted March 20, 2006 at 09:29 AM Report Share #18814 Posted March 20, 2006 at 09:29 AM Eu lembro-me que o meu primeiro projecto em OO, eu chamava os destrutores implicitamente ... Digamos que o nosso prof não achou piada nenhuma 🙂 - Destineo Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now