Ir para conteúdo
Entre para seguir isso  
Eventide

[nv: av]Programação Orientada a Objetos

Recommended Posts

Eventide    7
Eventide

Programação Orientada a Objetos

[Lua]

 

 

:confused:Que raios será isso?:confused:

 

A orientação a objetos, também conhecida como Programação Orientada a Objetos (POO) ou ainda em inglês Object-Oriented Programming (OOP) é um paradigma de análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos.

Em alguns contextos, prefere-se usar modelagem orientada ao objeto, em vez de programação.

A análise e projeto orientados a objetos têm como meta identificar o melhor conjunto de objetos para descrever um sistema de software. O funcionamento deste sistema se dá através do relacionamento e troca de mensagens entre estes objetos.

Na programação orientada a objetos, implementa-se um conjunto de classes que definem os objetos presentes no sistema de software. Cada classe determina o comportamento (definidos nos métodos) e estados possíveis (atributos) de seus objetos, assim como o relacionamento com outros objetos.

 

 

fonte: wikipedia

ahn?:slap:

Traduzindo:

É uma forma de organizar e programar seus codes de forma diferente da habitual. Nessa forma são definidas classes e seus atributos e objetos pertencentes a essa classe, "fragam" esses atributos.

 

 

E como fazer isso em lua?

segue o tutorial feito pelo Fusion(graças a insistentes pedidos meus:whistle:):

 

Tutorial:

 

Como eu(fusion) vi que varias pessoas estão tendo duvidas em relação a 'Lua orientada a objetos', eu resolvi criar um tutorial para esclarece-las.

 

Primeiramente, o que a final de contas é 'Lua orientada a objetos'?

É nada mais do que um objeto que é criado a partir de uma 'classe' e que contém informações próprias.

 

E como podemos criar essas tal 'classes'?

Bom, existem vários métodos mas o mais utilizado é:

Class = {}

 

Mas atenção, não é só isso! Uma classe precisa de um 'banco de dados' para armazenar suas características. Para isso, criamos uma metatable:

        Class_Metatable { __index = Class }

 

Mas e agora? Como que nós podemos usar essas 'classes' para criar objetos?

Para criar um objeto com a 'classe', nós devemos criar uma nova instância dela. Por exemplo:

        Object = Object or {}
       Object = setmetatable ( Object, Class_Metatable )

Pronto. Uma nova instância foi criada a partir de uma classe.

 

Mas há outro modo também que é bem mais usado. Criar uma instância por meio de uma função na class normalmente denominada 'new'. Ela fica mais ou menos assim:

        function Class:new ()
           return setmetatable ( {}, Class_Metatable )
       end

 

Caso você queira já definir características nessa função, faça da seguinte maneira:

            function Class:new ( X )
               return setmetatable ( { X = X }, Class_Metatable )
           end

 

 

Ok. Já sabemos como criar classes, instâncias mas e quanto as funções dessa classe e como usá-las?

Para criar uma função nesta 'classe' você precisa fornecer a informação para o programa:

        function Class:Function ( Arguments )
           -- Stuff
       end

 

Facil não? Pois é mas é agora que entra a parte que deve confundir mais as pessoas: como usá-las. Na verdade essa é uma parte bem simples. Você deve fornecer a instância que esta sendo usada ( nesse caso 'Object' ) e depois o comando:

        Object:Function ( Arguments )

 

não entendeu como funciona os objetos? observe o desenho:

 

objetodk1.jpg

 

E como podemos criar novas características nessa 'classe'?

Em Lua se você usar uma variável inexistente, ela será criada instantaneamente e usada. Nas 'classes' Não é diferente. Para criar novas variáveis para a classe basta adicionar um 'self' na frente. Desse modo:

        functon Class:Function ( Arguments )
           self.name = Arguments.name
       end

 

classekj7.jpg

 

Pois é. Mamão com açúcar. Mas e para utiliza-las? Do mesmo jeito. Para utilizar essas variáveis você precisa apenas que colocar um 'self' na frente.

 

Agora ai vai um exemplo de criação e utilização de uma classe:

Class = {}
Class_Metatable = { __index = Class }

function Class:new ()
   return setmetatable ( {}, Class_Metatable )
end

function Class:SetName ( name )
   self.name = name
end

function Class:GetName ( )
   return self.name
end

Object = Class:new ()
Object:SetName ( 'MyClass' )

print ( Object:GetName )

 

Pronto! Espero que com esse pequeno o tutorial você já possa entender melhor como fazer uma classe em Lua e como utiliza-las.

 

 

 

caso ainda reste duvidas, poste aqui que eu(Eventide) falo pro fusion vir aqui resolver, falows! :bye:

Compartilhar este post


Link para o post
Mock    32
Mock

Ta Ta Ta...

Entendi 60%

mais ja vi muitos scripts usando isso e sei que isso e util xD

eu nao sabia pra que agora to sabendo.

 

Aprovado

Compartilhar este post


Link para o post
PoSo    0
PoSo

Cara eu entendi como funciona, mas esses dias tava pesquisando na wiki e olha oque tem por lá:

 

Lua é uma linguagem que suporta apenas um pequeno número de estruturas, tais como dados atômicos, valores booleanos, números (dupla precisão em ponto flutuante por padrão), e strings. As estruturas de dados comuns, tais como matrizes, conjuntos, tabelas, listas, e registros podem ser representados por meio da Lua. Lua não foi construída com suporte para programação orientada a objeto.
Alguém poderia traduzir?

Obrigado, grande tutorial.

Abraços ;D

Compartilhar este post


Link para o post
MotoBoy    0
MotoBoy

suahsuhas

isso é bom..

pois cujo disse o Eventide..

a proxima base usada no SVN vai ser baseada (base baseada? Oo) nisso aew xD

 

vlw eventide..

vo economizar um tempão com isso aew >.<

 

flws~~

Compartilhar este post


Link para o post
Eventide    7
Eventide

@mock

levei um susto quando vi seu nick dizendo aprovado... O.O

bom, eu também não entendi algumas coisas(principalmente sobre meta-tabelas)

mas qualquer duvida, fale com o fusion ou com o nostradamus. (unicos caras que eu sei que manjam bem disso)

 

@poso

talvez esse artigo da wikipedia esteja falando de alguma versão beeeeeeem antiga de Lua

Compartilhar este post


Link para o post
PoSo    0
PoSo

Talvez ela não fora construida com intuito de suportar, mas se adaptarmos ela funciona?

Não sei. =P

Ainda fica a dúvida.

Abraço ;D

Compartilhar este post


Link para o post
Eventide    7
Eventide

@poso

talvez o texto da wikipedia se refira as funções originais do lua, por exemplo, em c++ as funções são orientadas, tipo:

std::cout << "texto" std::endl        <--- orientação 

 

em lua, não:

print "texto"

 

mas, eu estou meio confuso quanto a isso. vou tentar ver com alguém FERAno assunto pra ver se resolve... o.o

Compartilhar este post


Link para o post
PoSo    0
PoSo

De qualquer forma, agradeço a atenção.

Compartilhar este post


Link para o post
Fusion    0
Fusion

Na verdade poso, lua não foi feita de fato com supporte a orientação de objetos. Por isso nós utilizamos tabelas que no tutorial eu chamei de 'classe'.

Compartilhar este post


Link para o post
GDLib    2
GDLib

O tutorial está meio incompleto, ele não explora todas as variabilidades e possibilidades da orientação em objetos. Mas apesar disso, se trata apenas do básico, o que já é alguma coisa.

 

Só digo uma coisa: cuidado com os syntax suggars, eles não devem ser abusados apesar de "bonitinhos".

 

Existe a possibilidade também de com metatables, criar single inheritance ou mesmo multi inheritance (heranças). A construção de super classes possibilita também a criação do famoso "class extend" do PHP.

 

@MotoBoy

O revscriptsys explora 100% o potencial da orientação aplicada a objetos. Foi uma sugestão minha a implementação e eu e Remere somos os encarregados de tal projeto. Com a implementação, a maioria dos scripts feitos hoje serão postos no ostracismo (deprecated, desuso).

Compartilhar este post


Link para o post
MotoBoy    0
MotoBoy

pocha vida

melhor começar a me dedicar mais a isso ;/

antes que me desatualize ;/

vlw pelo aviso nostra~~

 

flws~~

Compartilhar este post


Link para o post
[ B a l i l l o ]    0
[ B a l i l l o ]

O tutorial está bom e está horrivel ao mesmo tempo.

Bom que eu digo é só fachada, porque é muito pouco 'intendivel', se é que vc me intende ... intendeu? x-x

Compartilhar este post


Link para o post
Eventide    7
Eventide

@/\

que parte você não entendeu?

 

< o texto abaixo é só um pensamento, não leia! >

 

 

Só falta me pedirem para escrever o texto em tiopês...

 

 

Editado por Eventide

Compartilhar este post


Link para o post
MotoBoy    0
MotoBoy

suhaushauhsauhsuahsauhs

bom.. realmente num tah taum explicado

mais d apra entender ^^"

agora.. sei que vo ter que ler ele inumers vezes pra eu captar..

quando eu terminar meu duelo eu começo a estudar isso =O~~

 

flws~~

Compartilhar este post


Link para o post
PoSo    0
PoSo

Bom então deve ser porquê eu não entendo nada de tabel/metatabels,

Seria legal um tutorial, se é que já não existe.

Vo pesquisar sobre o assunto.

Abraços.

 

edit:

voces chamam de tabela oque eu chamo de array? [matrizes e vetores ?]

assim sim, fica bem mais facil a compreensão. =P

Editado por PoSo

Compartilhar este post


Link para o post
Boleta    1
Boleta

Hehe, apesar de simples, eu gostei do tutorial. Realmente, para quem não conhece orientação a objetos, fica um pouco complicado, mas nada de outro mundo :).

 

Sobre a fala do wikipedia, o que provavelmente acontece é que, no mundo da programação, existem, como principais ambientes de trabalho, a orientação a eventos e a orientação a objetos. A orientação a objetos, como já diz o nome, é um ambiente que define todos os elementos dos softwares/scripts como objetos criados a partir de classes instanciadas. A orientação a eventos, além de suportar orientação a objetos na maioria dos casos, não oferece todos os recursos para que possamos criar classes como na orientação a objetos (classes abstratas, estruturas, heranças, membros estáticos, namespaces, interfaces...). Percebe-se, também, que todos os códigos em LUA (no otserv) são baseados em eventos (OnWalk, OnSay, OnUse...) aleatórios (mesmo que originados de eventos de classes na raiz do c++, o lua apenas trabalha com os eventos, e não com o objeto "game" em si). Dessa forma, pode ser que não seja considerada uma linguagem orientada a objetos, mesmo que de algum suporte a isso.

 

Espero que tenha ficado claro :) (e, por favor, me corrijam se eu estiver errado).

 

Abraços.

Compartilhar este post


Link para o post
Eventide    7
Eventide

valeu pela explicação boleta!

se tiverem alguma duvida, e não souberem expo-la, recomendo que leiam de novo... :*

Compartilhar este post


Link para o post
viniciusfeijo    0
viniciusfeijo

Alguem pode me falar aplicações de classes p/ otservers? Não consegui enxergar muito bem :P, entendi +- o conceito também, preciso reler mais algumas vezes pra entender bem ehehe

Compartilhar este post


Link para o post
PoSo    0
PoSo

Explicação do Boleta deu pra clarear bem a idéia.

Compartilhar este post


Link para o post
Eventide    7
Eventide

@orothenez

nunca vi script usando isso aqui na otnet, mas você poderá achar em fóruns internacionais, mas mesmo assim, não são muitos...

 

(tirando os NPCs novos, que usam isso)

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×