Sto lavorando a Juno con Julia.
julia: OOP o no
Non so se Julia richiede OOP o meno.
Ad esempio, c'è qualcosa come class
o struct
di C++?
Come dichiararlo con membri come dati o una funzione?
Sto lavorando a Juno con Julia.
julia: OOP o no
Non so se Julia richiede OOP o meno.
Ad esempio, c'è qualcosa come class
o struct
di C++?
Come dichiararlo con membri come dati o una funzione?
In caso di dubbio, leggere la documentazione ...
http://docs.julialang.org/en/release-0.4/manual/types/#composite-types
farla breve:
type MyType
a::Int64
b::Float64
end
x = MyType(3, 4)
x.a
EDIT: I metodi sono definiti di fuori la definizione del tipo, ad esempio,
function double(x::MyType)
x.a *= 2
end
Metodi fanno non vivono all'interno del tipo, come avrebbero fatto in C++ o Python, per esempio. Ciò consente a una delle funzionalità chiave di Julia, la distribuzione multipla, di funzionare anche con tipi definiti dall'utente, che si trovano esattamente allo stesso livello dei tipi definiti dal sistema.
questo può sembrare un po 'pedante (non sto provando!), In python la tua funzione 'double()' sarà solo una funzione, non un metodo. dettagli: https://stackoverflow.com/questions/20981789/difference-between-methods-and-functions – stucash
Il punto è che in Python si definisce spesso x.double(), cioè un doppio metodo dell'oggetto. –
Non sono esperto di lingua, ma la mia comprensione è: Sì ... e no.
Ha l'equivalente di classi e strutture, tuttavia non esistono metodi su tali oggetti diversi da un singolo costruttore.
Nei linguaggi orientati agli oggetti tradizionali, come C++, Java, Python e Ruby, i tipi composti hanno anche denominate funzioni ad essi associate e la combinazione viene chiamata "oggetto". Nei linguaggi puramente orientati agli oggetti, come Python e Ruby, tutti i valori sono oggetti che siano compositi o meno. Nei linguaggi orientati agli oggetti meno puri, inclusi C++ e Java, alcuni valori, come numeri interi e valori a virgola mobile, non sono oggetti, mentre le istanze di tipi compositi definiti dall'utente sono oggetti veri con metodi associati. In Julia, tutti i valori sono oggetti, ma le funzioni non sono raggruppate con gli oggetti su cui operano. Ciò è necessario dal momento che Julia sceglie quale metodo utilizzare per la distribuzione multipla, vale a dire che i tipi di tutti gli argomenti di una funzione vengono considerati quando si seleziona un metodo, anziché solo il primo (vedere Metodi per ulteriori informazioni sui metodi e la spedizione). Pertanto, sarebbe inappropriato che le funzioni "appartengano" solo al loro primo argomento. Organizzare i metodi in oggetti funzione piuttosto che avere un nome di borse di metodi "dentro" ogni oggetto finisce per essere un aspetto molto utile del design del linguaggio.
Vorrei menzionare questa conversazione degna di nota all'interno del gruppo utenti Julia Julia and Object-Oriented Programming.
Per me Julia non è come un linguaggio OO convenzionale, e mi piace sempre pensare a Julia, come più di un metodo orientato lingua che un Object Oriented uno, che è perché se si tenta di creare un struttura dati incapsulati e funzionalità a Julia, presto ti metteresti nei guai.
Julia non è orientata agli oggetti in senso pieno perché non è possibile associare metodi agli oggetti di Julia ("tipi").I tipi sembrano però molto simili agli oggetti. Tuttavia, poiché non hanno i loro metodi associati e non c'è ereditarietà, gli oggetti stessi non agiscono. Invece hai funzioni che agiscono sugli oggetti.
La differenza è ball.checkCollision() vs checkCollision (ball, Walls). In realtà non è un grosso problema. Puoi creare qualcosa come l'ereditarietà avendo un tipo avere un campo di un altro tipo, e dispatch multipli ti permette di scrivere funzioni che fanno cose diverse in base agli oggetti che gli dai, che possono essere quasi come i metodi degli oggetti. La vera differenza è dove si salva la funzione e i tipi in un file. Quindi puoi creare una sorta di stile orientato quasi a oggetti in Julia, ma è comunque nettamente diverso dai linguaggi OOP.
Sì. Semplicemente non può ereditare da "classi" concrete, solo da quelle astratte.
Le funzioni con invio multiplo sono una rigida generalizzazione dei metodi con invio singolo e sono strettamente più polimorfiche. Devi solo definirli al di fuori della definizione di una classe, perché possono "appartenere" a più oggetti.
I metodi tradizionali in un linguaggio OO sono un caso speciale di funzioni di Julia in cui è disponibile solo dispatching basato sul primo argomento.
Quando Google 'Julia supporta OOP', ricevo molti articoli correlati. Non sono utili? Veramente? –
Questa domanda è il primo risultato che appare quando lo guardo su google;). In ogni caso è piuttosto difficile passare dal linguaggio Python o C++ a quello nella tua mente e farlo funzionare. Nella mia esperienza =) – silgon