-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodelo.lisp
73 lines (62 loc) · 2.69 KB
/
modelo.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
(defpackage #:universo
(:use :common-lisp))
(in-package #:universo)
(defvar *numeracion* 0)
(defun new-name (prefijo)
(incf *numeracion*)
(if prefijo
(format nil "~A-~A" prefijo *numeracion*)
(format nil "objeto-~A" *numeracion*)))
(defclass constelacion () ((nombre :initform (new-name 'constelacion))
(sistemas :initform nil)))
(defclass sistema () ((nombre :initform (new-name 'sistema))
(entidades :initform nil)
(constelacion :initform nil)))
(defclass entidad () ((nombre :initform (new-name 'entidad))
(componentes :initform nil)
(sistema :initform nil)))
(defclass componente () ((nombre :initform (new-name 'componente))
(tipo)
(atributos :initform nil)
(entidad :initform nil)))
(defparameter *default-constelacion* nil)
(defparameter *default-sistema* nil)
(defparameter *default-entidad* nil)
(defparameter *default-componente* nil)
(defmethod initialize-instance :after ((co constelacion ) &key)
(setf *default-constelacion* co))
(defmethod initialize-instance :after ((s sistema ) &key (constelacion *default-constelacion*))
(setf *default-sistema* s)
(unless constelacion
(setf constelacion (make-instance 'constelacion)))
(setf *default-constelacion* constelacion)
(setf (slot-value constelacion 'sistemas) (append (slot-value constelacion 'sistemas) (list s))))
(defmethod initialize-instance :after ((e entidad ) &key (sistema *default-sistema*))
(setf *default-entidad* e)
(unless sistema
(setf sistema (make-instance 'sistema)))
(setf *default-sistema* sistema)
(setf (slot-value sistema 'entidades) (append (slot-value sistema 'entidades) (list e))))
(defmethod initialize-instance :after ((c componente ) &key (entidad *default-entidad*))
(setf *default-componente* c)
(unless entidad
(setf entidad (make-instance 'entidad)))
(setf *default-entidad* entidad)
(setf (slot-value entidad 'componentes) (append (slot-value entidad 'componentes) (list c))))
(defun pretty-print-constelacion (co)
(format t "Constelacion ~A~%" (slot-value co 'nombre))
(dolist (s (slot-value co 'sistemas))
(pretty-print-sistema s)))
(defun pretty-print-sistema (s)
(format t " Sistema ~A~%" (slot-value s 'nombre))
(dolist (e (slot-value s 'entidades))
(pretty-print-entidad e)))
(defun pretty-print-entidad (e)
(format t " Entidad ~A~%" (slot-value e 'nombre))
(dolist (c (slot-value e 'componentes))
(pretty-print-componente c)))
(defun pretty-print-componente (c)
(format t " Componente ~A~%" (slot-value c 'nombre))
(format t " Tipo ~A~%" (slot-value c 'nombre))
(dolist (a (slot-value c 'atributos))
(format t " Atributo ~A" a)))