Introdução à POO
Parte da seção Programação orientada a objetos do Journey de GDScript da Coddy. Lição 2 de 65.
A programação orientada a objetos (POO) organiza um programa em torno de objetos. Um objeto reúne dados (variáveis) e as funções que trabalham com esses dados. Uma classe descreve o que seus objetos armazenam e fazem, e você pode criar quantos objetos precisar a partir dela.
Em GDScript, cada arquivo de script é uma classe. Dê um nome a ela com class_name e declare as variáveis que cada objeto contém:
# car.gd
class_name Car
extends RefCounted
var brand: String = "Generic"
var wheels: int = 4extends RefCounted faz com que o Godot libere um objeto Car automaticamente quando nenhuma variável mais se referir a ele. Use-o para toda classe que armazene dados e não seja um nó. Um script sem uma linha extends também estende RefCounted.
Chame new() na classe para criar um objeto e, em seguida, acesse suas variáveis com um ponto:
# main.gd
var my_car := Car.new()
print(my_car.wheels) # 4
print(my_car is Car) # trueO operador is verifica a partir de qual classe um objeto foi criado. Imprimir o próprio objeto mostra apenas um id como <RefCounted#-9223372009860233781>, então imprima as variáveis dele.
A classe é o modelo, e cada objeto é uma coisa separada construída a partir dela: chamar Car.new() duas vezes dá a você dois carros.
Desafio
FácilCrie a classe Car em car.gd:
- o nome da classe é
Care ela estendeRefCounted - uma variável
Stringbrandque começa como"Generic" - uma variável
intwheelsque começa como4
O código fornecido lê quantos carros criar e cria cada um com Car.new(). Ele imprime o número de carros e o total de rodas. Quando cria pelo menos um carro, ele lê uma marca para o primeiro carro e imprime as marcas do primeiro e do último carro. Para as entradas 3 e Tesla, ele imprime:
Cars: 3
Wheels: 12
First car: Tesla
Last car: GenericSeu código deve ficar em car.gd. main.gd contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
extends Node
func _ready():
# Código de entrada/saída fornecido: mantenha-o como está
var count := int(OS.read_string_from_stdin())
var garage: Array[Car] = []
for i in count:
garage.append(Car.new())
var total := 0
for car in garage:
total += car.wheels
print("Cars: %d" % garage.size())
print("Wheels: %d" % total)
if count > 0:
garage[0].brand = OS.read_string_from_stdin()
print("First car: %s" % garage[0].brand)
print("Last car: %s" % garage[-1].brand)
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação orientada a objetos
1Fundamentos da POO
Arquivos externosIntrodução à POOClasses vs. objetosA palavra-chave selfMétodosPropriedadesConstrutor (_init)Revisão - Calculadora simples4Polimorfismo
Revisitando a Sobrescrita de MétodosDuck TypingClasses e Métodos AbstratosDesign de InterfacesRevisão - Calculadora de Formas7Sinais
O que é um sinal?Declarando e emitindoConectando-se a sinaisSinais com argumentosRevisão - Sistema de saúde10Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite2Propriedades de Classe
Variáveis de Instância vs. EstáticasFunções EstáticasMétodos Setters de PropriedadeMétodos Getters de PropriedadePrivado por ConvençãoRecapitulando: Gerenciador de Conta Bancária5Encapsulamento
Membros públicos e privadosValidação com settersOcultação de informaçõesPropriedades somente para leituraRevisão - Sistema de registros de alunos8Conceitos Avançados de POO
Composição vs. HerançaClasses InternasNós como ComponentesRefCounted vs. NodeEnums em Classes3Herança
Herança básicaA palavra-chave superSobrescrita de métodosCadeias de herançaVerificações de tipo com isRevisão - Hierarquia de funcionários6Métodos especiais
Introdução aos métodos virtuaisO método _to_stringIteradores personalizadosRevisão - Lista personalizada9Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão StrategyPratique por conta própria: Compilador de GDScript online