Your code looks like a good start.
type PhysicalNode{T}
ID::Int
name::AbstractString
x::Float64
y::Float64
inEdges::Vector{T}
outEdges::Vector{T}
demands::Vector{Any} # ?
end
type Edge{T}
...
end
function addInEdge!(pn::PhysicalNode, edge::Edge):
push!(pn.inEdges, edge)
end
... etc
If you're just starting out with Julia, I would advise you to leave your
type fields untyped. You'll get fewer headaches that way. Chances are that
it'll be fast enough for your purposes already, and you can always add
types once your code works.
Cédric
On Saturday, August 27, 2016 at 5:27:32 AM UTC-4, Jeffrey Sarnoff wrote:
>
> In an object-oriented language, an instance of a class is an element of
> computation (1 is an instance of the class Integer, and Integer is a
> subclass of Number).
> In a type-guided language, a realization of a type is an element of
> computation (1 is a realization of type Int, and type Int is a subtype of
> Integer and of Number).
> The work done through the use of classes is taken up through types and
> methods defined on/over types. There is no "better" general alternative
> for translating class-based design than applying Julia's types and methods.
> A better question: "How should I define PhysicalNodes in Julia differently
> than I did in Python?"
>
>
>
>
>
>
> On Saturday, August 27, 2016 at 2:52:24 AM UTC-4, [email protected] wrote:
>>
>> What are the alternatives to using classes in Julia apart from types? Can
>> you please explain how I can define the PhysicalNodes class in Julia the
>> same way like I did in python?
>>
>> On Friday, 26 August 2016 23:16:39 UTC+2, Cedric St-Jean wrote:
>>>
>>> It's not possible in Julia at the moment. There's an issue for it.
>>> <https://github.com/JuliaLang/julia/issues/269> I think the main
>>> options are:
>>>
>>> - Don't declare the types. This may make it slower, but depending on the
>>> use case it might not be a big deal
>>> - Use parametric types, i.e.
>>>
>>> type Node{T}
>>> edges::Vector{T}
>>> end
>>>
>>> type Edge{T}
>>> node::T
>>> end
>>>
>>>
>>>
>>> On Friday, August 26, 2016 at 1:38:38 PM UTC-4, [email protected] wrote:
>>>>
>>>> Hello all,
>>>>
>>>> I'm making a transition from Python to Julia and in the process, I've
>>>> encountered a small difficulty. While in python, i declared three classes
>>>> as follows:
>>>>
>>>> class PHY_NODES:
>>>> def __init__(self, nodeID, nodenum, x, y, demands):
>>>> self.id = nodeID
>>>> self.nodenum = nodenum
>>>> self.x = x
>>>> self.y = y
>>>> self.inEdges = []
>>>> self.outEdges = []
>>>> self.demands = demands
>>>>
>>>> def __str__(self):
>>>> return "Physical Node ID: nodenum: %4d x: %.3f y: %.3f" %(
>>>> self.id, self.nodenum, self.x, self.y )
>>>>
>>>> def addInEdge(self, edge):
>>>> self.inEdges.append( edge )
>>>>
>>>> def addOutEdge(self, edge):
>>>> self.outEdges.append( edge )
>>>>
>>>>
>>>> class PHY_LINKS:
>>>> def __init__(self, linkID, source, destination, SourceID,
>>>> DestinationID,):
>>>> self.linkID = linkID
>>>> self.source = source
>>>> self.destination = destination
>>>> self.SourceID = SourceID
>>>> self.DestinationID = DestinationID
>>>>
>>>>
>>>> def __str__(self):
>>>> return "Physical Link ID: %4d source: %s destination: %s
>>>> SourceID: %4d DestinationID: %4d " %(self.linkID, self.source,
>>>> self.destination, self.SourceID, self.DestinationID, )
>>>>
>>>>
>>>> class DEMAND:
>>>> def __init__(self, PoP_bdw_up, PoP_stor, PoP_pro, MME_bdw_up,
>>>> MME_stor, MME_pro,demandID):
>>>> self.PoP_bdw_up = PoP_bdw_up
>>>> self.PoP_stor = PoP_stor
>>>> self.PoP_pro = PoP_pro
>>>> self.MME_bdw_up = MME_bdw_up
>>>> self.MME_stor = MME_stor
>>>> self.MME_pro = MME_pro
>>>> self.demandID = demandID
>>>>
>>>>
>>>> def __str__(self):
>>>> return " PoPbdwup: %.3f PoPstor: %.3f PoPpro: %.3f MMEbdwup:
>>>> %.3f MMEstor: %.3f MMEpro: %.3f, self.demandID )
>>>>
>>>> However, I have some trouble when replicating the same in Julia
>>>> especially due to the nested classes in PHY_NODES (self.inEdges as well as
>>>> self,demands)
>>>>
>>>> The Julia version of the Phy_Node class is as below:
>>>>
>>>> type PhysicalNodes
>>>> ID:Int
>>>> name:String
>>>> x: Float
>>>> y:Float
>>>> inEdges: ?
>>>> outEdges: ?
>>>> demands: ?
>>>> end
>>>>
>>>> I don't how to declare the inEdges, outEdges and demands here. Could
>>>> you please help me with this?
>>>>
>>>>