SlideShare ist ein Scribd-Unternehmen logo
1 von 60
Downloaden Sie, um offline zu lesen
http://www.doctrine-project.org/
jueves, 26 de septiembre de 13
¿Qué es Doctrine?
jueves, 26 de septiembre de 13
¿Qué es Doctrine?
•DBAL (Database abstraction layer)
•ORM (Object Relational Mapper)
jueves, 26 de septiembre de 13
¿Qué significa DBAL?
jueves, 26 de septiembre de 13
Database Abstraction
Layer
jueves, 26 de septiembre de 13
DBAL
“Powerful database abstraction layer with many features for
database schema introspection, schema management and
PDO abstraction”
jueves, 26 de septiembre de 13
DBAL
<?php
use DoctrineDBALConfiguration;
use DoctrineDBALDriverManager;
$config = new Configuration();
//..
$connectionParams = array(
    'dbname' => 'mydb',
    'user' => 'user',
    'password' => 'secret',
    'host' => 'localhost',
    'driver' => 'pdo_mysql',
);
$conn = DriverManager::getConnection($connectionParams, $config);
Crear conexión
jueves, 26 de septiembre de 13
DBAL
<?php
// ...
$conn = DriverManager::getConnection($connectionParams, $config);
$stmt = $conn->query('SELECT * FROM users');
while ($row = $stmt->fetch()) {
    echo $row['name'], PHP_EOL;
}
Ejecutar consulta
jueves, 26 de septiembre de 13
DBAL
<?php
// ...
$conn = DriverManager::getConnection($connectionParams, $config);
$stmt = $conn->prepare('SELECT * FROM users WHERE name = ? AND age = ?');
$stmt->bindValue(1, $name);
$stmt->bindValue(2, $age);
$stmt->execute();
Ejecutar consulta con parámetros
jueves, 26 de septiembre de 13
DBAL
<?php
// ...
$conn = DriverManager::getConnection($connectionParams, $config);
$stmt = $conn->prepare('SELECT * FROM users WHERE id = :id');
$stmt->bindValue(':id', $id);
$stmt->execute();
Ejecutar consulta con parámetros con nombre
jueves, 26 de septiembre de 13
DBAL
<?php
// ...
$conn = DriverManager::getConnection($connectionParams, $config);
$stmt = $conn->prepare('SELECT * FROM users WHERE created > :created');
$stmt->bindValue(':created', $created, 'datetime');
$stmt->execute();
Ejecutar consulta con parámetros indicando typo de dato
jueves, 26 de septiembre de 13
¿Qué es un ORM?
jueves, 26 de septiembre de 13
Object-Relational
Mapping
jueves, 26 de septiembre de 13
"Es una técnica de programación para convertir datos
entre el sistema de tipos utilizado en un lenguaje de
programación orientado a objetos y la utilización de
una base de datos relacional, utilizando un motor de
persistencia. En la práctica esto crea una base de
datos orientada a objetos virtual, sobre la base de
datos relacional."
http://es.wikipedia.org/wiki/Mapeo_objeto-relacional
jueves, 26 de septiembre de 13
ORM
• Transforma datos de la DB a objetos PHP
jueves, 26 de septiembre de 13
ORM
• Transforma datos de la DB a objetos PHP
• Y de PHP a la DB
jueves, 26 de septiembre de 13
ORM
• Transforma datos de la DB a objetos PHP
• Y de PHP a la DB
• Transforma las relaciones entre dos tablas
jueves, 26 de septiembre de 13
ORM
• Transforma datos de la DB a objetos PHP
• Y de PHP a la DB
• Transforma las relaciones entre dos tablas
• Simplifica la transformación entre tipos de
datos
jueves, 26 de septiembre de 13
ORM
• Transforma datos de la DB a objetos PHP
• Y de PHP a la DB
• Transforma las relaciones entre dos tablas
• Simplifica la transformación entre tipos de
datos
• Data Mapper
jueves, 26 de septiembre de 13
ORM
¿Qué nos soluciona?
jueves, 26 de septiembre de 13
ORM
¿Qué nos soluciona?
• Podemos utilizar orientación a objetos
jueves, 26 de septiembre de 13
ORM
¿Qué nos soluciona?
• Podemos utilizar orientación a objetos
• Evita tener SQL en todos lados
jueves, 26 de septiembre de 13
ORM
¿Qué nos soluciona?
• Podemos utilizar orientación a objetos
• Evita tener SQL en todos lados
• Simplifica el entendimiento del código
jueves, 26 de septiembre de 13
ORM
¿Qué nos soluciona?
• Podemos utilizar orientación a objetos
• Evita tener SQL en todos lados
• Simplifica el entendimiento del código
• Facilita el proceso de migración
jueves, 26 de septiembre de 13
ORM
¿Qué nos soluciona?
• Podemos utilizar orientación a objetos
• Evita tener SQL en todos lados
• Simplifica el entendimiento del código
• Facilita el proceso de migración
• SQL Injection
jueves, 26 de septiembre de 13
ORM
¿Problemas?
jueves, 26 de septiembre de 13
ORM
¿Problemas?
• Agrega overhead
• Puede ejecutar SQL no óptimo(si no se
utiliza adecuadamente)
• No siempre es la mejor solución
jueves, 26 de septiembre de 13
ORM
EntityManager
jueves, 26 de septiembre de 13
ORM
EntityManager
• Responsable de gestionar la persistencia y
obtención de entidades
jueves, 26 de septiembre de 13
ORM
EntityManager
• Responsable de gestionar la persistencia y
obtención de entidades
• Uno por conexión
jueves, 26 de septiembre de 13
ORM
EntityManager
• Responsable de gestionar la persistencia y
obtención de entidades
• Uno por conexión
• Utiliza el patrón UnitOfWork para optimizar
la gestión de muchas entidades
jueves, 26 de septiembre de 13
ORM
EntityManager
<?php
use DoctrineORMEntityManager;
use DoctrineORMToolsSetup;
$paths = array("/path/to/entity-files");
$isDevMode = false;
// Configuracion para entidades que utilizan annotations
$config = Setup::createAnnotationMetadataConfiguration($paths, $isD
evMode);
// Obtengo el EntityManager
$entityManager = EntityManager::create($connection, $config);
jueves, 26 de septiembre de 13
ORM
EntityManager
<?php
// ...
// Parametros de conexión
$connectionParams = array(
    'dbname' => 'mydb',
    'user' => 'user',
    'password' => 'secret',
    'host' => 'localhost',
    'driver' => 'pdo_mysql',
);
// Obtengo el EntityManager
$entityManager = EntityManager::create($connectionParams, $config);
jueves, 26 de septiembre de 13
ORM
Entity Manager
// Indica al EntityManager que se
// debe persistir la entidad en la db
$entityManager->persist($entity);
persist()
jueves, 26 de septiembre de 13
ORM
Entity Manager
// Escribe los cambios en la base de datos
$entityManager->flush();
flush()
jueves, 26 de septiembre de 13
ORM
Entidades
jueves, 26 de septiembre de 13
ORM
Entidades
• Objetos PHP
jueves, 26 de septiembre de 13
ORM
Entidades
• Objetos PHP
• Representan a una tabla en la BD
jueves, 26 de septiembre de 13
ORM
Entidades
• Objetos PHP
• Representan a una tabla en la BD
• Una instancia representa a una fila en la tabla
jueves, 26 de septiembre de 13
ORM
Entidades
• Objetos PHP
• Representan a una tabla en la BD
• Una instancia representa a una fila en la tabla
• Se pueden heredar
jueves, 26 de septiembre de 13
ORM
Entidades
<?php
class User
{
private $id;
private $name;
public function getId()
{
return $this->id;
}
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
$a = new User();
$a->setName("Ismael");
jueves, 26 de septiembre de 13
ORM
Entidades
<?php
/** @Entity */
class User
{
    /**
     * @Id
     * @Column(type="integer")
     * @GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @Column(type="string")
     */
    private $name;
}
jueves, 26 de septiembre de 13
ORM
Entidades
$user = new User();
$user->setName("Ismael");
$entityManager->persist($user);
$entityManager->flush();
echo $user->getId();
1.Instanciación
2.Hidratación
3.Persistencia
4.Escritura
jueves, 26 de septiembre de 13
ORM
Relaciones entre entidades
jueves, 26 de septiembre de 13
ORM
Relaciones entre entidades
•OneToOne
•OneToMany
•ManyToOne
•ManyToMany
jueves, 26 de septiembre de 13
ORM
Relaciones entre entidades
<?php
/** @Entity */
class User
{
    /**
     * @Id
     * @Column(type="integer")
     * @GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @Column(type="string")
     */
    private $name;
    /**
     * @OneToMany(
* targetEntity="PhoneNumber", 
* mappedBy="user",
* cascade={“persist”, “remove”}
* )
     */  
    private $phoneNumbers;
}
<?php
/** @Entity */
class PhoneNumber
{
    /**
     * @Id
     * @Column(type="integer")
     * @GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @Column(type="string")
     */
    private $phone;
    /**
     * @ManyToOne(
* targetEntity="User", 
* inversedBy="phoneNumbers"
* )
     */  
    private $user;
}
jueves, 26 de septiembre de 13
ORM
Relaciones entre entidades
// Crea una instancia de PhoneNumber
$phoneNumber = new PhoneNumber();
$phoneNumber->setPhone("555-1234");
$user = new User();
$user->setName("Ismael");
// Asocia el phone number al usuario
$user->addPhoneNumber($phoneNumber);
// Guarda ambas entidades
$entityManager->persist($user);
$entityManager->flush();
foreach ($user->getPhoneNumbers() as $phoneNumber) {
    echo $phoneNumber->getPhone(), PHP_EOL;
}
jueves, 26 de septiembre de 13
ORM
Repositorios
jueves, 26 de septiembre de 13
ORM
Repositorios
• Nos da acceso a los datos
jueves, 26 de septiembre de 13
ORM
Repositorios
• Nos da acceso a los datos
• Independiente de como se persisten los
datos
jueves, 26 de septiembre de 13
ORM
Repositorios
• Nos da acceso a los datos
• Independiente de como se persisten los
datos
• Existe uno por entidad
jueves, 26 de septiembre de 13
ORM
Repositorios
• Nos da acceso a los datos
• Independiente de como se persisten los
datos
• Existe uno por entidad
• Puedo crear mis propios repositorios
jueves, 26 de septiembre de 13
ORM
Repositorios
<?php
interface ObjectRepository
{
    public function find($id);
    public function findAll();
    public function findBy(array $criteria, array $orderBy = null, 
$limit = null, $offset = null);
    public function findOneBy(array $criteria);
}
jueves, 26 de septiembre de 13
ORM
Repositorios
<?php
// Retorna el repositorio para la entidad NamespaceUser
$repository = $entityManager->getRepository('NamespaceUser');
// Obtengo el objeto con ID = 1
$user = $repository->find(1);
echo $user->getName();
find()
jueves, 26 de septiembre de 13
ORM
Repositorios
<?php
// Retorna el repositorio para la entitdad NamespaceUser
$repository = $entityManager->getRepository('NamespaceUser');
// Obtengo un array de objetos User
$user = $repository->findAll();
foreach ($users as $user) {
    echo $user->getName();
}
findAll()
jueves, 26 de septiembre de 13
ORM
Repositorios
<?php
// Retorna el repositorio para la entitdad NamespaceUser
$repository = $entityManager->getRepository('NamespaceUser');
// Obtengo un array de objetos User donde status = enabled
$user = $repository->findBy(array('status' => 'enabled'));
foreach ($users as $user) {
    echo $user->getName();
}
findBy()
jueves, 26 de septiembre de 13
ORM
Repositorios
<?php
// Retorna el repositorio para la entitdad NamespaceUser
$repository = $entityManager->getRepository('NamespaceUser');
// Obtengo el primer objeto User donde status = enabled
$user = $repository->findOneBy(array('status' => 'enabled'));
echo $user->getName();
findOneBy()
jueves, 26 de septiembre de 13
Resumen
DBAL
Capa de abstracción para la interacción con
nuestra bases de datos
ORM
Herramienta que nos permite traducir objetos
PHP en registros de la base de datos y viceversa
jueves, 26 de septiembre de 13
¿Preguntas?
jueves, 26 de septiembre de 13
¡Gracias!
jueves, 26 de septiembre de 13

Weitere ähnliche Inhalte

Ähnlich wie Doctrine

Documentacion postgresql
Documentacion postgresqlDocumentacion postgresql
Documentacion postgresqlCesar Martinez
 
Cloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de PersistenciaCloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de PersistenciaDavid J. Brenes
 
Integrando Redis en aplicaciones Symfony2
Integrando Redis en aplicaciones Symfony2Integrando Redis en aplicaciones Symfony2
Integrando Redis en aplicaciones Symfony2Ronny López
 
Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Asier Marqués
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryJavier P.
 
Introducción a RubyOnRails
Introducción a RubyOnRailsIntroducción a RubyOnRails
Introducción a RubyOnRailsPablo Marrero
 
Curso php dia4
Curso php dia4Curso php dia4
Curso php dia4cognos_uie
 
Oracle Database 11g vs 12c
Oracle Database 11g vs 12cOracle Database 11g vs 12c
Oracle Database 11g vs 12cDeiby Gómez
 
Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007JuancaPompilla
 
Cursores , procedimientos almacenados en oracle y sql server
Cursores , procedimientos almacenados en oracle y sql serverCursores , procedimientos almacenados en oracle y sql server
Cursores , procedimientos almacenados en oracle y sql serverHome
 
Taller Redis
Taller RedisTaller Redis
Taller Redisbetabeers
 
Desarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryDesarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryJavier P.
 
Gustavo php
Gustavo phpGustavo php
Gustavo phpGustavo
 
Programacion de bases de datos en OOoBasic
Programacion de bases de datos en OOoBasicProgramacion de bases de datos en OOoBasic
Programacion de bases de datos en OOoBasicAlexandro Colorado
 

Ähnlich wie Doctrine (20)

Documentacion postgresql
Documentacion postgresqlDocumentacion postgresql
Documentacion postgresql
 
Cloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de PersistenciaCloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de Persistencia
 
Integrando Redis en aplicaciones Symfony2
Integrando Redis en aplicaciones Symfony2Integrando Redis en aplicaciones Symfony2
Integrando Redis en aplicaciones Symfony2
 
Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2
 
Administracion de base de datos
Administracion de base de datosAdministracion de base de datos
Administracion de base de datos
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQuery
 
PHP's FIG and PSRs
PHP's FIG and PSRsPHP's FIG and PSRs
PHP's FIG and PSRs
 
Introducción a RubyOnRails
Introducción a RubyOnRailsIntroducción a RubyOnRails
Introducción a RubyOnRails
 
Curso php dia4
Curso php dia4Curso php dia4
Curso php dia4
 
Oracle Database 11g vs 12c
Oracle Database 11g vs 12cOracle Database 11g vs 12c
Oracle Database 11g vs 12c
 
9.laravel
9.laravel9.laravel
9.laravel
 
Mysql adodb pdf_php
Mysql adodb pdf_phpMysql adodb pdf_php
Mysql adodb pdf_php
 
Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007
 
Cursores , procedimientos almacenados en oracle y sql server
Cursores , procedimientos almacenados en oracle y sql serverCursores , procedimientos almacenados en oracle y sql server
Cursores , procedimientos almacenados en oracle y sql server
 
Taller Redis
Taller RedisTaller Redis
Taller Redis
 
Desarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryDesarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQuery
 
Postgresql expo
Postgresql expoPostgresql expo
Postgresql expo
 
Base de Datos
Base de DatosBase de Datos
Base de Datos
 
Gustavo php
Gustavo phpGustavo php
Gustavo php
 
Programacion de bases de datos en OOoBasic
Programacion de bases de datos en OOoBasicProgramacion de bases de datos en OOoBasic
Programacion de bases de datos en OOoBasic
 

Mehr von Ismael Ambrosi

Mehr von Ismael Ambrosi (6)

Assetic PHPmvd
Assetic PHPmvdAssetic PHPmvd
Assetic PHPmvd
 
Introducción a testing en php
Introducción a testing en phpIntroducción a testing en php
Introducción a testing en php
 
Symfony forms
Symfony formsSymfony forms
Symfony forms
 
Empezando con Twig
Empezando con TwigEmpezando con Twig
Empezando con Twig
 
Introducción a composer
Introducción a composerIntroducción a composer
Introducción a composer
 
Introducción a Symfony
Introducción a SymfonyIntroducción a Symfony
Introducción a Symfony
 

Kürzlich hochgeladen

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 

Kürzlich hochgeladen (13)

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 

Doctrine