Thank you for the quick reply. 

With this example it makes much sense: 

Depending on the language you will have to adopt a different style of 
programming. 

That makes much sense ;-)

On Wednesday, August 10, 2016 at 9:46:26 AM UTC+2, Mauro wrote:
>
> Yes, this is correct.  The difference to classic OO programming 
> languages is that in Julia a method is not "owned" by a type.  Instead 
> it can be owned by several types as dispatch is on all arguments.  In 
> python and other OO dispatch is only on the first (usually implicit) 
> argument.  For your example this does not really matter, but if you have 
> several "equal" types interacting, then it does: 
>
> type Rocket end 
> type Asteroid end 
> type Planet end 
>
> collide(a,b) = collide(b,a) # make it commute 
> collide(::Rocket, ::Union{Asteroid,Planet}) = println("rocket explodes") 
> collide(::Asteroid, ::Planet) = println("dinosaurs die") 
>
> collide(Planet(),Rocket()) # rocket explodes 
> collide(Asteroid(), Planet()) # dinosaurs die 
>
> This would be more awkward to program in python.  I think it's a better 
> mental model to not view Julia as OO. 
>
> On Wed, 2016-08-10 at 09:26, Willem Hekman <hekman...@gmail.com 
> <javascript:>> wrote: 
> > Hello all, 
> > 
> > I must say that I`m quite new to object oriented programming. 
> > 
> > Do I understand correctly from the manual that in Julia (unlike python) 
> you 
> > do not use the keyword "self" and declare methods that apply to a type 
> > outside the type definition? 
> > 
> > To illustrate, let's say we want to have a type of apple and want to 
> push a 
> > flavor to the array of flavors that characterizes an apple: 
> > 
> > # define a type: Apple 
> > type Apple 
> >     brand::ASCIIString 
> >     color::ASCIIString 
> >     flavors::Array{ASCIIString,1} 
> > 
> > 
> > end 
> > 
> > # a method designed to add flavors to the apple 
> > function add_flavor(apple::Apple,flavor::ASCIIString) 
> > 
> >     push!(apple.flavors,flavor) 
> > end 
> > # create an instance of an AppleFuji = Apple("Fuji","red",["sweet"]) 
> > 
> > # add a flavor 
> > add_flavor(Fuji, "sour") 
> > 
> > Is this the way you'd do it in Julia? 
> > 
> > In python I got used to putting methods that apply to "Apple" instances 
> > inside the type definition where the keyword "self" would be used to add 
> a 
> > flavor: push!(self.flavors,flavor) 
> > 
> > What would you say? 
> > 
> > -Willem 
>

Reply via email to