editat perDarrera edicióDiferènciesRestaurar Revisió
daniel herrera24/04/2018 15:14
@@ -16,97 +16,6 @@
 * Selecciona la cèl·lula amb més massa.
 
 ![agar](https://i.imgur.com/pG1e7xV.png)
-
-**Solució ( by Jon Millán )**
-
-    :::SQL
-    -- TYPE posicion_type
-    CREATE OR REPLACE TYPE posicion_type AS OBJECT (
-      x FLOAT,
-      y FLOAT
-    );
-    /
-    
-    -- Super TYPE cerula_type
-    CREATE OR REPLACE TYPE cerula_type AS OBJECT (
-      idno      NUMBER,
-      masa      NUMBER,
-      posicion  posicion_type,
-      MAP MEMBER FUNCTION get_idno RETURN NUMBER,
-      NOT INSTANTIABLE MEMBER PROCEDURE incrementa_masa ( increment IN NUMBER )
-    ) NOT INSTANTIABLE NOT FINAL;
-    /
-    CREATE OR REPLACE TYPE BODY cerula_type AS
-      MAP MEMBER FUNCTION get_idno RETURN NUMBER IS
-      BEGIN
-        RETURN idno;
-      END;
-    END;
-    /
-    
-    -- TYPE jugador_type
-    CREATE OR REPLACE TYPE jugador_type UNDER cerula_type (
-      nom   VARCHAR(100),
-      color VARCHAR(20),
-      OVERRIDING MEMBER PROCEDURE incrementa_masa ( increment IN NUMBER )
-    ) FINAL;
-    /
-    CREATE OR REPLACE TYPE BODY jugador_type AS
-      OVERRIDING MEMBER PROCEDURE incrementa_masa ( increment IN NUMBER ) IS
-        nova_masa INT;
-      BEGIN
-        nova_masa := masa + increment;
-        IF (nova_masa < 24000) THEN
-          masa := nova_masa;
-        END IF;
-      END;
-    END;
-    /
-    
-    -- TYPE virus_type
-    CREATE OR REPLACE TYPE virus_type UNDER cerula_type (
-      OVERRIDING MEMBER PROCEDURE incrementa_masa ( increment IN NUMBER )
-    ) FINAL;
-    /
-    CREATE OR REPLACE TYPE BODY virus_type AS
-      OVERRIDING MEMBER PROCEDURE incrementa_masa ( increment IN NUMBER ) IS
-        nova_masa INT;
-      BEGIN
-        nova_masa := masa + increment;
-        IF (nova_masa < 182) THEN
-          masa := nova_masa;
-        END IF;
-      END;
-    END;
-    /
-    
-    -- Create Tables
-    CREATE TABLE cerulas OF cerula_type (idno PRIMARY KEY );
-    
-    -- Insert data
-    INSERT INTO cerulas VALUES (jugador_type(1, 10, posicion_type(1,1), 'John', 'Blau'));
-    INSERT INTO cerulas VALUES (jugador_type(2, 12, posicion_type(1,2), 'Pepe', 'Verd'));
-    INSERT INTO cerulas VALUES (jugador_type(3, 14, posicion_type(1,3), 'Antonio', 'Negre'));
-    INSERT INTO cerulas VALUES (virus_type(4, 14, posicion_type(1,4)));
-    INSERT INTO cerulas VALUES (virus_type(5, 24, posicion_type(1,4)));
-    INSERT INTO cerulas VALUES (virus_type(6, 34, posicion_type(1,4)));
-    
-    -- Query and Update
-    DECLARE
-      jugador jugador_type;
-    BEGIN
-      -- Seleccionar el jugador
-      SELECT TREAT(VALUE(ce) AS jugador_type) INTO jugador FROM cerulas ce WHERE TREAT(VALUE(ce) AS jugador_type).nom = 'John';
-    
-      -- Incrementar masa
-      DBMS_OUTPUT.PUT_LINE('Antes: ' || jugador.masa);
-      jugador.incrementa_masa(33);
-      DBMS_OUTPUT.PUT_LINE('Despues: ' || jugador.masa);
-    
-      -- Actualizar sus datos
-      UPDATE cerulas c SET c.masa = jugador.masa WHERE c.idno = jugador.get_idno();
-      --UPDATE cerulas SET masa = jugador.masa WHERE idno = jugador.get_idno();
-    END;
 Continguts: 
 
 Resultats d'aprenentatge: 
Restaurar
daniel herrera04/04/2017 17:04
@@ -3,7 +3,7 @@
 Oracle Objecte-Relacional - Herència - Agar.io
 Agar té molt de problemes amb el lag. Pensen que emmagatzemar les dades amb Oracle Objects els pot ajudar. Per aquest motiu busquen el millor expert (que ets tu ) per tal que els dissenyi una base de dades orientada objecte on poder emmagatzemar les cèl·lules de les partides.
 
-Un cop has fet l'anàlisi, identifiques que hi ha el super-tipus `cèl·lula` amb les propietats `massa` (enter) i `posició` ( és un tipus on emmagatzemes la `x` i la `y` de tipus float ). També hi ha un mètode ( que cal sobreescriure als subtipus ) que es diu `incrementa_massa`.
+Un cop has fet l'anàlisi, identifiques que hi ha el super-tipus `cèl·lula` amb les propietats `id` (enter), `massa` (enter) i `posició` ( és un tipus on emmagatzemes la `x` i la `y` de tipus float ). També hi ha un mètode ( que cal sobreescriure als subtipus ) que es diu `incrementa_massa`.
 
 El sub-tipus `jugador` té els següents camps `nom` i `color` i el sub-tipus `virus` no té cap camp nou.
 
@@ -19,96 +19,94 @@
 
 **Solució ( by Sergio Rovira 2016' )**
 
-
     :::SQL
-    --crear el tipux posició
-    CREATE TYPE posicio_typ AS OBJECT (
+    -- TYPE posicion_type
+    CREATE OR REPLACE TYPE posicion_type AS OBJECT (
       x FLOAT,
-      y FLOAT);
-      
-    --crear el tipus base (super tipus)
-    CREATE OR REPLACE TYPE celula_typ AS OBJECT(
-      massa INTEGER,
-      posicio POSICIO_TYP,
-      MEMBER PROCEDURE incrementa_massa(temp IN NUMBER))
-      NOT FINAL;
-      
-    CREATE OR REPLACE TYPE BODY celula_typ AS MEMBER 
-      PROCEDURE incrementa_massa(temp IN NUMBER) IS
-        massa_total INT;
+      y FLOAT
+    );
+    /
+    
+    -- Super TYPE cerula_type
+    CREATE OR REPLACE TYPE cerula_type AS OBJECT (
+      idno      NUMBER,
+      masa      NUMBER,
+      posicion  posicion_type,
+      MAP MEMBER FUNCTION get_idno RETURN NUMBER,
+      NOT INSTANTIABLE MEMBER PROCEDURE incrementa_masa ( increment IN NUMBER )
+    ) NOT INSTANTIABLE NOT FINAL;
+    /
+    CREATE OR REPLACE TYPE BODY cerula_type AS
+      MAP MEMBER FUNCTION get_idno RETURN NUMBER IS
       BEGIN
-        massa_total := massa + temp;
-        massa := massa_total;
+        RETURN idno;
       END;
     END;
+    /
     
-    --crear subtipus jugador
-    CREATE TYPE jugador_typ UNDER celula_typ (
-      nom VARCHAR2(100),
-      color VARCHAR2(7),
-      OVERRIDING MEMBER PROCEDURE incrementa_massa(temp in NUMBER)
-      );
-    
-    CREATE OR REPLACE TYPE BODY jugador_typ AS 
-    OVERRIDING MEMBER PROCEDURE incrementa_massa(temp IN NUMBER) IS
-        massa_total INT;
+    -- TYPE jugador_type
+    CREATE OR REPLACE TYPE jugador_type UNDER cerula_type (
+      nom   VARCHAR(100),
+      color VARCHAR(20),
+      OVERRIDING MEMBER PROCEDURE incrementa_masa ( increment IN NUMBER )
+    ) FINAL;
+    /
+    CREATE OR REPLACE TYPE BODY jugador_type AS
+      OVERRIDING MEMBER PROCEDURE incrementa_masa ( increment IN NUMBER ) IS
+        nova_masa INT;
       BEGIN
-        massa_total := massa + temp;
-        IF (massa_total<24000) THEN 
-          massa := massa_total;
-        ELSE
-          massa := 24000;
+        nova_masa := masa + increment;
+        IF (nova_masa < 24000) THEN
+          masa := nova_masa;
         END IF;
       END;
     END;
+    /
     
-    --crear subtipus virus
-    CREATE TYPE virus_typ UNDER celula_typ(
-      OVERRIDING MEMBER PROCEDURE incrementa_massa(temp IN NUMBER)
-    );
-    
-    CREATE OR REPLACE TYPE BODY virus_typ AS 
-    OVERRIDING MEMBER PROCEDURE incrementa_massa(temp IN NUMBER) IS
-        massa_total INT;
+    -- TYPE virus_type
+    CREATE OR REPLACE TYPE virus_type UNDER cerula_type (
+      OVERRIDING MEMBER PROCEDURE incrementa_masa ( increment IN NUMBER )
+    ) FINAL;
+    /
+    CREATE OR REPLACE TYPE BODY virus_type AS
+      OVERRIDING MEMBER PROCEDURE incrementa_masa ( increment IN NUMBER ) IS
+        nova_masa INT;
       BEGIN
-        massa_total := massa + temp;
-        IF (massa_total<182) THEN 
-          massa := massa_total;
-        ELSE
-          massa := 182;
+        nova_masa := masa + increment;
+        IF (nova_masa < 182) THEN
+          masa := nova_masa;
         END IF;
       END;
     END;
+    /
     
-    --crear la taula de cel·lules
-    CREATE TABLE celula OF celula_typ;
+    -- Create Tables
+    CREATE TABLE cerulas OF cerula_type (idno PRIMARY KEY );
     
-    --insertar jugadors i celules
-    INSERT INTO celula VALUES(
-      jugador_typ(15, posicio_typ(15,14), 'Sergio', '#ffffff'));
+    -- Insert data
+    INSERT INTO cerulas VALUES (jugador_type(1, 10, posicion_type(1,1), 'John', 'Blau'));
+    INSERT INTO cerulas VALUES (jugador_type(2, 12, posicion_type(1,2), 'Pepe', 'Verd'));
+    INSERT INTO cerulas VALUES (jugador_type(3, 14, posicion_type(1,3), 'Antonio', 'Negre'));
+    INSERT INTO cerulas VALUES (virus_type(4, 14, posicion_type(1,4)));
+    INSERT INTO cerulas VALUES (virus_type(5, 24, posicion_type(1,4)));
+    INSERT INTO cerulas VALUES (virus_type(6, 34, posicion_type(1,4)));
     
-    INSERT INTO celula VALUES(
-      jugador_typ(5000, posicio_typ(68,168), 'Big guy', '#fff000'));
+    -- Query and Update
+    DECLARE
+      jugador jugador_type;
+    BEGIN
+      -- Seleccionar el jugador
+      SELECT TREAT(VALUE(ce) AS jugador_type) INTO jugador FROM cerulas ce WHERE TREAT(VALUE(ce) AS jugador_type).nom = 'John';
     
-    INSERT INTO celula VALUES(
-      jugador_typ(520, posicio_typ(200,25), 'hes a big guy', '#f0f0f0'));
+      -- Incrementar masa
+      DBMS_OUTPUT.PUT_LINE('Antes: ' || jugador.masa);
+      jugador.incrementa_masa(33);
+      DBMS_OUTPUT.PUT_LINE('Despues: ' || jugador.masa);
     
-    INSERT INTO celula VALUES(
-      virus_typ(120, posicio_typ(25,46)));
-      
-    --DROP TABLE celula;
-    --DROP TYPE virus_typ;
-    --DROP TYPE jugador_typ;
-    --DROP TYPE celula_typ;
-
-
-
-
-
-
-
-
-
+      -- Actualizar sus datos
+      UPDATE cerulas c SET c.masa = jugador.masa WHERE c.idno = jugador.get_idno();
+      --UPDATE cerulas SET masa = jugador.masa WHERE idno = jugador.get_idno();
+    END;
 Continguts: 
 
 Resultats d'aprenentatge: 
Restaurar
daniel herrera22/04/2016 11:44
@@ -21,7 +21,6 @@
 
 
     :::SQL
-
     --crear el tipux posició
     CREATE TYPE posicio_typ AS OBJECT (
       x FLOAT,
@@ -46,11 +45,40 @@
     --crear subtipus jugador
     CREATE TYPE jugador_typ UNDER celula_typ (
       nom VARCHAR2(100),
-      color VARCHAR2(7)
+      color VARCHAR2(7),
+      OVERRIDING MEMBER PROCEDURE incrementa_massa(temp in NUMBER)
       );
     
+    CREATE OR REPLACE TYPE BODY jugador_typ AS 
+    OVERRIDING MEMBER PROCEDURE incrementa_massa(temp IN NUMBER) IS
+        massa_total INT;
+      BEGIN
+        massa_total := massa + temp;
+        IF (massa_total<24000) THEN 
+          massa := massa_total;
+        ELSE
+          massa := 24000;
+        END IF;
+      END;
+    END;
+    
     --crear subtipus virus
-    CREATE TYPE virus_typ UNDER celula_typ();
+    CREATE TYPE virus_typ UNDER celula_typ(
+      OVERRIDING MEMBER PROCEDURE incrementa_massa(temp IN NUMBER)
+    );
+    
+    CREATE OR REPLACE TYPE BODY virus_typ AS 
+    OVERRIDING MEMBER PROCEDURE incrementa_massa(temp IN NUMBER) IS
+        massa_total INT;
+      BEGIN
+        massa_total := massa + temp;
+        IF (massa_total<182) THEN 
+          massa := massa_total;
+        ELSE
+          massa := 182;
+        END IF;
+      END;
+    END;
     
     --crear la taula de cel·lules
     CREATE TABLE celula OF celula_typ;
@@ -74,7 +102,7 @@
     --DROP TYPE celula_typ;
 
 
-*Nota: en aquesta solució falten dues coses: sobreescriure el mètode `incrementa_massa` per tal que les cel·lules no puguin superar el límit de massa i fer la super-classe `cèl·lula` no instanciable per tal que només es puguin insertar `virus` i `jugadors` a la taula. Es deixa aquesta feina per al lector.*
+
 
 
 
Restaurar
daniel herrera20/04/2016 18:18
@@ -1,13 +1,13 @@
 
 Bases de dades objectes-relacionals
 Oracle Objecte-Relacional - Herència - Agar.io
-Agar té molt de problemes amb el lag. Pensen que Oracle Objects els pot ajudar. Per aquest motiu busquen el millor expert (que ets tu ) per tal que els dissenyi una base de dades orientada objecte on poder emmagatzemar les cèl·lules de les partides.
+Agar té molt de problemes amb el lag. Pensen que emmagatzemar les dades amb Oracle Objects els pot ajudar. Per aquest motiu busquen el millor expert (que ets tu ) per tal que els dissenyi una base de dades orientada objecte on poder emmagatzemar les cèl·lules de les partides.
 
-Identifiques que hi ha el super-tipus cèl·lula amb les propietats `massa` (enter) i `posició` ( és un tipus on emmagatzemes la x i la y de tipus float ). També hi ha un mètode ( que cal sobreescriure als subtipus ) que es diu `incrementa_massa`.
+Un cop has fet l'anàlisi, identifiques que hi ha el super-tipus `cèl·lula` amb les propietats `massa` (enter) i `posició` ( és un tipus on emmagatzemes la `x` i la `y` de tipus float ). També hi ha un mètode ( que cal sobreescriure als subtipus ) que es diu `incrementa_massa`.
 
-El sub-tipus jugador té els següents camps `nom` i `color` i el sub-tipus virus no té cap camp nou.
+El sub-tipus `jugador` té els següents camps `nom` i `color` i el sub-tipus `virus` no té cap camp nou.
 
-La massa d'una cèl·lula jugador es pot incrementar fins a 24.000 i la d'un virus fins a 182.
+La massa d'una `cèl·lula` `jugador` es pot incrementar fins a 24.000 i la d'un `virus` fins a 182.
 
 **Entregables:**
 
@@ -20,10 +20,13 @@
 
 
     :::SQL
+
+    --crear el tipux posició
     CREATE TYPE posicio_typ AS OBJECT (
       x FLOAT,
       y FLOAT);
       
+    --crear el tipus base (super tipus)
     CREATE OR REPLACE TYPE celula_typ AS OBJECT(
       massa INTEGER,
       posicio POSICIO_TYP,
@@ -38,15 +41,19 @@
       END;
     END;
     
+    --crear subtipus jugador
     CREATE TYPE jugador_typ UNDER celula_typ (
       nom VARCHAR2(100),
       color VARCHAR2(7)
       );
     
+    --crear subtipus virus
     CREATE TYPE virus_typ UNDER celula_typ();
     
+    --crear la taula de cel·lules
     CREATE TABLE celula OF celula_typ;
     
+    --insertar jugadors i celules
     INSERT INTO celula VALUES(
       jugador_typ(15, posicio_typ(15,14), 'Sergio', '#ffffff'));
     
@@ -59,10 +66,10 @@
     INSERT INTO celula VALUES(
       virus_typ(120, posicio_typ(25,46)));
       
-    DROP TABLE celula;
-    DROP TYPE virus_typ;
-    DROP TYPE jugador_typ;
-    DROP TYPE celula_typ;
+    --DROP TABLE celula;
+    --DROP TYPE virus_typ;
+    --DROP TYPE jugador_typ;
+    --DROP TYPE celula_typ;
 
 
 
Restaurar
daniel herrera20/04/2016 17:18
@@ -16,6 +16,55 @@
 
 ![agar](http://i.imgur.com/pG1e7xV.png)
 
+**Solució ( by Sergio Rovira 2016' )
+
+
+    :::SQL
+    CREATE TYPE posicio_typ AS OBJECT (
+      x FLOAT,
+      y FLOAT);
+      
+    CREATE OR REPLACE TYPE celula_typ AS OBJECT(
+      massa INTEGER,
+      posicio POSICIO_TYP,
+      MEMBER PROCEDURE incrementa_massa(temp IN NUMBER))
+      NOT FINAL;
+      
+    CREATE OR REPLACE TYPE BODY celula_typ AS MEMBER PROCEDURE incrementa_massa(temp IN NUMBER) IS
+        massa_total INT;
+      BEGIN
+        massa_total := massa + temp;
+        massa := massa_total;
+      END;
+    END;
+    
+    CREATE TYPE jugador_typ UNDER celula_typ (
+      nom VARCHAR2(100),
+      color VARCHAR2(7)
+      );
+    
+    CREATE TYPE virus_typ UNDER celula_typ();
+    
+    CREATE TABLE celula OF celula_typ;
+    
+    INSERT INTO celula VALUES(
+      jugador_typ(15, posicio_typ(15,14), 'Sergio', '#ffffff'));
+    
+    INSERT INTO celula VALUES(
+      jugador_typ(230, posicio_typ(68,168), 'Pepe', '#fff000'));
+    
+    INSERT INTO celula VALUES(
+      jugador_typ(520, posicio_typ(200,25), 'Manel', '#f0f0f0'));
+    
+    INSERT INTO celula VALUES(
+      virus_typ(120, posicio_typ(25,46)));
+      
+    DROP TABLE celula;
+    DROP TYPE virus_typ;
+    DROP TYPE jugador_typ;
+    DROP TYPE celula_typ;
+
+
 
 
 
Restaurar
Consulteu nota legal i condicions