From: Martin Vales Date: 2008-04-25T06:45:08+09:00 Subject: Re: inverse OOP Robert Klemme wrote: > On 24.04.2008 12:15, Eleanor McHugh wrote: >> On 24 Apr 2008, at 10:40, Martin Vales wrote: > >>> I have always had a doubt about OOP. >>> Usually we have a parent and several child, but what happen if we need >>> the inverse system. for example DBI/DBD APIs.?? >>> >>> I need build map proyections and i want and intermediate API for all >>> proyections clases. > > What exactly do you mean by "intermediate"? Do you mean that all > projections should have the same interface? For that you do not need > inheritance at all - at least in Ruby. Or do you rather mean that they > share behavior (implementation)? Same interface: For example This is the intermediate API #type="projection=lambert, varphi_0=45, k=1" type="projection=UTM, zone=30, false_east=40000" prj=Projection.new(type) [x,y]=prj.geodetic_to_projected(lambda,phi) [lambda,phi]=prj.projected_to_geodetic(x,y) This is an especific API for UTM: parameters=UtmParameters.new parameters.zone=30 parameters.false_east=30 prj=UtmProjection.new(parameters) [x,y]=prj.utm_geodetic_to_projected(lambda,phi) [lambda,phi]=prj.utm_projected_to_geodetic(x,y) This is an especific API for lambert: parameters=LambertParameters.new parameters.varphi_0=30 parameters.k=1 prj=LambertProjection.new(parameters) [x,y]=prj.lambert_geodetic_to_projected(lambda,phi) [lambda,phi]=prj.lambert_projected_to_geodetic(x,y) I have used the proj.4 C library and they used pointers to functions in C, in a offuscated code. http://proj.maptools.org/ proj.4 use a text file like this: "projection=lambert, varphi_0=45, k=1" Every projection is an module (ANSI C file) and a only modulo know what module call using the text file. There are 170 different projections. +proj=cea +lon_0=Central Meridian +lat_ts=Standard Parallel +x_0=False Easting +y_0=False Northing +proj=lcc +lat_1=Latitude of natural origin +lon_0=Longitude of natural origin +k_0=Scale factor at natural origin +x_0=False Origin Easting +y_0=False Origin Northing +proj=tmerc +lat_0=Latitude of natural origin +lon_0=Longitude of natural origin +k=Scale factor at natural origin +x_0=False Easting +y_0=False Northing ... > > I was going to also suggest the module approach. But I do wonder why > Martin chose to call it "inverse OOP". It seems the more appropriate > term would be "multiple inheritance" or am I missing something? Okay. then this is a multiple inheritance problem?? -- Posted via http://www.ruby-forum.com/.