close
Warning:
Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.
- Timestamp:
-
Dec 12, 2009, 4:06:42 PM (15 years ago)
- Author:
-
Víctor de Buen Remiro
- Comment:
-
--
Legend:
- Unmodified
- Added
- Removed
- Modified
-
v11
|
v12
|
|
123 | 123 | //Si no se quiere cambiar nada con herencia múltiple se enumeran las clases |
124 | 124 | //antecesoras |
125 | | Class @VectorDoc: Vector, Doc; |
| 125 | Class @VectorDoc: @Vector, @Doc; |
126 | 126 | |
127 | 127 | //Con herencia simple no tiene mucho sentido no cambiar nada |
… |
… |
|
191 | 191 | Class @ClHeight; |
192 | 192 | |
193 | | //This class uses ClHeight as a method argument |
| 193 | //This class uses @ClHeight as a method argument |
194 | 194 | Class @ClAge |
195 | 195 | { |
… |
… |
|
202 | 202 | }; |
203 | 203 | |
204 | | //This class uses ClAge as a method argument |
| 204 | //This class uses @ClAge as a method argument |
205 | 205 | Class @ClHeight |
206 | 206 | { |
… |
… |
|
236 | 236 | |
237 | 237 | === Constructores de instancias === |
238 | | La forma más recomendada de crear instancias de forma regulada es mediante construtores que son métodos estáticos que devuelven una instancia de esa clase |
239 | | |
240 | | {{{ |
241 | | Class @Sphere |
242 | | { |
| 238 | La forma más recomendada de crear instancias de forma regulada es mediante construtores que son métodos estáticos que devuelven una instancia de esa clase a partir de una lista de los argumentos necesarios para la definición del objeto. Los mimebros auxiliares o derivados serán rellenados por el propio constructor. |
| 239 | |
| 240 | Evidentemente una misma clase puede tener varios constructores y unos pueden ser especializaciones de otros más generales a los que llamen después de calcular los argumentos necesarios |
| 241 | |
| 242 | {{{ |
| 243 | Class @Circle |
| 244 | { |
| 245 | //Definition members |
| 246 | Real _.center.x_; |
| 247 | Real _.center.y_; |
243 | 248 | Real _.radius; |
244 | | Real equalName(ClAge arg) |
245 | | { |
246 | | _.name==arg::_.name |
| 249 | |
| 250 | //Auxiliar members |
| 251 | Real _.perimeter; |
| 252 | Real _.area; |
| 253 | |
| 254 | //Basic Constructor |
| 255 | Static @Circle New( |
| 256 | Real x, //First coordinate of center |
| 257 | Real y, //Second coordinate of center |
| 258 | Real r) //Radius |
| 259 | { |
| 260 | @Circle new = |
| 261 | [[ |
| 262 | Real _.center.x_ = x; |
| 263 | Real _.center.y_ = y; |
| 264 | Real _.radius = r; |
| 265 | //Auxiliuar members definition |
| 266 | Real _.perimeter = 2*Pi*r; |
| 267 | Real _.area = Pi*r^2 |
| 268 | ]] |
247 | 269 | }; |
248 | | Static @ClHeight(Text name, Real height) |
249 | | { |
250 | | @ClHeight new = |
251 | | [[ |
252 | | Text _.name; |
253 | | Real _.height; |
254 | | ]] |
255 | | } |
256 | | }; |
| 270 | //Derivate constructor |
| 271 | Static @Circle Random( |
| 272 | Real min.x, Real max.x, |
| 273 | Real min.y, Real max.y, |
| 274 | Real min.r, Real max.r,) |
| 275 | { |
| 276 | @Circle::New(Rand(min.x,max.x), |
| 277 | Rand(min.y,max.y), |
| 278 | Rand(min.r,max.r)) |
| 279 | }; |
| 280 | |
| 281 | //Returns true if the point (x,y) is inside the circle |
| 282 | Real includes(Real x, Real y) |
| 283 | { |
| 284 | (x-_.center.x)^2+(y-_.center.y)^2<=_.radius^2 |
| 285 | } |
| 286 | |
| 287 | }; |
| 288 | |
| 289 | @Circle c1 = @Circle::New(0,0,1); |
| 290 | @Circle c2 = @Circle::Random(0,1,-1,0,1/2,1); |
| 291 | |
257 | 292 | }}} |
258 | 293 | |