Estou com um objeto na mão.
- cilíndrico
- comprido
- ponta vermelha
- solta líquido
- tem mulher que morde
O que é? é uma caneta vermelha.
O que isso tem a ver com programação? Tudo.
Vamos passar isso pra programação....
Vocês começaram a vasculhar a coleção de objetos conhecidos com essas características pra saber qual tinha essas propriedades.
Vamos colocar isso em programação:
FOR EACH oObject IN ObjectColetion
DO CASE
CASE oObject:Formato != "cilíndrico"
CASE oObject:Comprimento != "comprido"
CASE oObject:Ponta != "vermelho"
CASE ! oObject:SoltaLiquido
CASE ! oObject:Morde
OTHERWISE
? oObject:Nome
ENDCASE
NEXT
Objeto/Classe.... pode ser qualquer coisa... mas não existe enquanto se trata de algo abstrato
Tem suas propriedades... que podemos considerar parecido com variáveis
No caso acima, a caneta escreve... isso seria um método/ação do objeto caneta... que podemos considerar uma função
De quebra, o FOR EACH... significa olhar item por item, dentro de uma coleção - coleção pode ser de letras numa string, de elementos num array, etc.
Conclusão:
objeto/classe sempre esteve no nosso dia a dia.
apenas conseguiram traduzir isso pra programação.
não consegue entender sobre classe/objeto?
O ponto é simples, está partindo do que conhece de programação, e não do que conhece do seu dia a dia.
Vamos à caneta:
CREATE CLASS CanetaClass
VAR Nome INIT "Caneta"
VAR Formato INIT "cilíndrico"
VAR Comprimento INIT "comprido"
VAR Ponta INIT "vermelho"
VAR SoltaLiquido INIT .T.
VAR Morde INIT .T.
METHOD Escrever()
ENDCLASS
Nesse momento a caneta existe? ainda não
oCaneta := CanetaClass():New()
Agora sim.
Complicando um pouco mais... poderíamos ter uma classe pra objeto generico... e criar a classe caneta herdando as características desse objeto.
Ou até várias canetas diferentes herdando a classe da caneta.
Diferente da realidade? não.
Ao falarmos de uma caneta, já temos na cabeça uma definição genérica de caneta.
Apenas vamos verificar o que uma caneta vai ter de diferente: pode ter botão de apertar, pode ter várias cores, etc.
Então... mentalmente já usamos herança de objetos.
É isso.
Não tem porque se complicar com objeto, faz parte do seu dia a dia.
Se não entendeu, é porque está partindo da referência errada.
Se partir de uma variável que pode ter características de local, public, private, static... não vai chegar ao objeto.
Seria o mesmo que partir de um caderno, pra tentar entender a caneta, achar que a caneta é um tipo de caderno.
E talvez por isso, uma pessoa nova em programação pode entender mais fácil:
Ela não vai usar a programação que conhece como referência, porque não conhece nenhuma.
Ela vai usar exatamente os objetos que conhece do dia a dia.
É isso.