Actually, at the level you are describing, there should be no difference between FP and OOP.<br><br>While OOP definitely emphasize data and relations, it is not the only paradigm that does so - and given your background you should be experienced with the relational paradigm, which has even heavier emphasis on data and relations, but is not OOP.
<br><br>To leverage your knowledge on relations - you can pretend sql queries are functions, i.e. select is a function, update is a function, and insert is a function.  Then instead of writing<br><br><div style="margin-left: 40px;">


object.insert()<br></div><br>you write <br><br><div style="margin-left: 40px;">insert (object) - which looks a lot like the sql query insert into table ... <br></div><br>That's it.  In the Java style OOP the head of the statement is an object, and in FP the head of the statement is a function name.  But in either case you need to model the same world.
<br><br>An extremely crude way of thinking about FP is that it decouples the data from the function (or vice versa, that OOP couples functions and data).  That means some facilities that you've taken for granted in OOP, such as inheritance, polymorphism, etc., will no longer be available.  But FP have a different approaches to address these problems, and that's where the rubber meet the road.  
<br><br>Erlang's process model is basically the Actor model - the idea of everything is an actor feels similar to everything is an object in OOP.  So as others have alluded to instead of thinking in objects you can think in processes.  But Actor model is independent of FP or OOP, so you would still have to get used to the FP part in Erlang.
<br><br>You might want to check out <a href="http://www.math.chalmers.se/%7Erjmh/Papers/whyfp.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://www.math.chalmers.se/~rjmh/Papers/whyfp.html
</a>.  A higher level introduction is <a href="http://www.defmacro.org/ramblings/fp.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
http://www.defmacro.org/ramblings/fp.html</a>.<br><br>Cheers,<br>yc<br><br><div><span class="gmail_quote">On 10/22/07, <b class="gmail_sendername">Alexander Lamb</b> <<a href="mailto:alexander.lamb@rodanotech.ch" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">

alexander.lamb@rodanotech.ch
</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div>Hello list,<div><br></div><div>I am trying to understand what is the design process (intellectual, that is) when building a program in Erlang.
</div><div><br></div><div>Indeed, in the object oriented world, I would start by finding what my classes might be and the relationship between them. Gradually I would add functions (class or instance methods) to the classes in order to provide solid foundations on top of which I can write an application.
</div><div><br></div><div>For example, I could have PERSON, PROFILE, ROLE, FEATURE, etc... and decide a PROFILE is a collection of FEATURES. A PERSON can have 0 or many ROLES. A ROLE is a PROFILE on a given area (a department for example) for a given time. I would then add functions such as "give all the active roles for the user" or "what features give that profile" or "does the user have a given feature for that department".
</div><div>I admit it is more complexe than that, but you get the idea.</div><div><br></div><div>Obviously, this doesn't seem to be the way to go with Erlang. Intuitively, I would start making a list of all the functions which will allow me to interract with my application. In that case I could have "give me all users with an active role on that department", etc... Then by implementing those high level functions I would split them into pieces by calling smaller simpler functions. The underlying data structure will "just follow" or "appear" naturally.
</div><div><br></div><div>Hence: object oriented design is "data structure and relationships first, functions second" and functional design is "functions first, data structure second".</div><div><br></div>


<div>Am I being over simplistic here. Are there some guidelines as to how one can approach a problem when creating a new program? Especially programs which deal with persistent data, not protocole analysers or socket servers!
</div><div><br></div><div>Thanks,</div><div><br></div><div>Alex<br><div> <span style="border-collapse: separate; border-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">


<span style="border-collapse: separate; border-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">


<span style="border-collapse: separate; border-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">


<div>--</div><div>Alexander Lamb</div><div>Founding Associate</div><div>RODANOTECH Sàrl</div><div><br></div><div>4 ch. de la Tour de Champel</div><div>1206 Geneva</div><div>Switzerland</div><div><br></div><div>Tel:  022 347 77 37
</div><div>Fax: 022 347 77 38</div><div><br></div><div><a href="http://www.rodanotech.ch" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://www.rodanotech.ch</a></div><div><br></div></span></span>


<br></span> </div><br></div></div><br>_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">


erlang-questions@erlang.org</a><br><a href="http://www.erlang.org/mailman/listinfo/erlang-questions" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://www.erlang.org/mailman/listinfo/erlang-questions
</a><br></blockquote></div><br>