SlideShare una empresa de Scribd logo
1 de 33
Descargar para leer sin conexión
©2015 GlobalLogic Inc. CONFIDENTIAL
©2015 GlobalLogic Inc. CONFIDENTIAL
Qué es C++
Fernando Farias
fernando.farias@globallogic.com
Fuentes:
➔ Software for infrastructure [Stroustrup] http://www.stroustrup.com/Software-for-infrastructure.
pdf
➔ Going Native 2012 Day 1 Keynote [Stroustrup] http://youtu.be/0iWb_qi2-uI
3 CONFIDENTIAL
Agenda
● Qué es C++
● Estilos de programación
● Qué buscamos
● Código palido
● Plan de acción
● Recursos
● Manejadores
● Moviendo recursos
● Estilo C++
● ¿ Preguntas ?
01
CONFIDENTIAL©2015 GlobalLogic Inc.
Es lo mismo que C !!!
Muy bajo nivel !!!
Lenguaje para
sistemas embebidos
Punteros y fallas de
núcleo
Que es C++
Colección de
características al azar
Lenguaje híbrido
Lenguaje de programación de abstracciones livianas
CONFIDENTIAL©2015 GlobalLogic Inc.
Que es C++
Realidades:
● Nada sirve para todo - X es lo mejor ? en qué contexto ?
● Hardware - un 50% de overhead se traduce en otra granja de servidores
● Confiabilidad - aplicaciones médicas, aeroespaciales, financieras
● Eficiencia - velocidad de procesado, poder de cómputo
● Time to market - esfuerzo para llegar a feature complete, y sin bugs
● Nivel del desarrollador - junior o senior
6 CONFIDENTIAL
Agenda
● Qué es C++
● Estilos de programación
● Qué buscamos
● Código palido
● Plan de acción
● Recursos
● Manejadores
● Moviendo recursos
● Estilo C++
● ¿ Preguntas ?
01
CONFIDENTIAL©2015 GlobalLogic Inc.
Estilos de programación
● Estilo C - macros, void*, acceso directo a recursos
● Estilo C++85 - classes, interfaces, objetos
● OO - classes, herencia multiple, polimorfismo
● Estilo C++ - Templates, programación genérica
● Estilo C++11 - Metaprogramming, algoritmos y conceptos
8 CONFIDENTIAL
Agenda
● Qué es C++
● Estilos de programación
● Qué buscamos
● Código palido
● Plan de acción
● Recursos
● Manejadores
● Moviendo recursos
● Estilo C++
● ¿ Preguntas ?
01
CONFIDENTIAL©2015 GlobalLogic Inc.
Qué buscamos
● Fácil para humanos y también para herramientas de humanos
● Mantenibilidad, rectitud, exactitud, expresión
● Modularidad, distribuible
● Manejo efectivo de los recursos
● Thread safe, a menos que existan razones para no
● Eficiencia, estructuras de datos compactas
● Portabilidad, a menos que existan razones para no
● Síntesis integrada, que todo trabaje al unísono
● Estándares y guías : estilo
10 CONFIDENTIAL
Agenda
● Qué es C++
● Estilos de programación
● Qué buscamos
● Código pálido
● Plan de acción
● Recursos
● Manejadores
● Moviendo recursos
● Estilo C++
● ¿ Preguntas ?
01
CONFIDENTIAL©2015 GlobalLogic Inc.
Código pálido
// base : memory to be stored
// nmemb : number of elements in memory
// size : number of bytes in an element
// compar : comparison function
void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void*, const void*));
void f(char* arr, int m, double* darr, int n) {
qsort(arr, m, sizeof(char*), cmpstringp);
qsort(darr, n, sizeof(double), compare_double);
}
Código pálido = Ineficiente, propenso a errores.
● array que no conoce el número de elementos contenidos
● no sabe como comparar double
● no conoce el tamaño de un double
● sistemáticamente descarta información de utilidad
● llamada a función indirecta es ineficiente
● previene optimizaciones como inline
● necesita más código, genera más oportunidades para bugs
● por eficiencia ?! porque es cool ?! nivel de bits !?
12 CONFIDENTIAL
Agenda
● Qué es C++
● Estilos de programación
● Qué buscamos
● Código pálido
● Plan de acción
● Recursos
● Manejadores
● Moviendo recursos
● Estilo C++
● ¿ Preguntas ?
01
CONFIDENTIAL©2015 GlobalLogic Inc.
Plan de Accion
● Mantener las interfaces simples
void sort(Container&)
● Mantener las llamadas simples
vector<string> vs;
sort(vs);
● Performance no se compromete
std::sort es más rápido que qsort por grandes factores
● Validación estática de tipos de datos
● No leaks ( y sin gc )
CONFIDENTIAL©2015 GlobalLogic Inc.
Plan de Accion
Enfocarse en las interfaces
● sin especificar
void increase_speed(double); // m/s ? km/h ?
rectangle(int, int, int, int); // top-down ? bottom-right ?
● bien especificadas
void increase_speed(Speed);
Rectangle(Point, Point);
● siempre usar interfaces con tipos de datos precisos
15 CONFIDENTIAL
Agenda
● Qué es C++
● Estilos de programación
● Qué buscamos
● Código pálido
● Plan de acción
● Recursos
● Manejadores
● Moviendo recursos
● Estilo C++
● ¿ Preguntas ?
01
CONFIDENTIAL©2015 GlobalLogic Inc.
Recursos
void f(const char* p) {
FILE* f = fopen(p, "r"); // adquisicion de f
// ...
// usando f
// ..
fclose(f); // liberar f
}
● el código que usa f puede ser muy complejo y olvidar de liberar f
● cualquier excepción puede olvidar liberar f
● el manual dice “todo fopen debe tener su fclose”, pero los compiladores no leen
manuales, y muchos programadores tampoco
Uso Ingenuo
CONFIDENTIAL©2015 GlobalLogic Inc.
Recursos
void f(const char* p) {
FILE* f = 0;
try {
f = fopen(p, "r"); // adquirir
// usar f
} catch(...) {
if (f) fclose(f);
throw;
}
if (f) fclose(f); // release f
}
● más largo
● duplica código
● incluso más propenso a errores
Arreglo Ingenuo
CONFIDENTIAL©2015 GlobalLogic Inc.
Recursos
class File_handle {
File* p;
public:
File_handle(const char* pp, const char* r) {
p = fopen(pp, r);
if (p==0)
throw File_error{pp, r};
}
~File_handle() {
flose(p);
}
}
void f(string s) {
File_handle fh{s, "r"};
// usar fh
}
● Liberará el recurso pase lo que pase
● Usamos RAII para memoria, locks, archivos, sockets, threads, y todo lo demas.
RAII - Resource Acquisition Is Initialization
19 CONFIDENTIAL
Agenda
● Qué es C++
● Estilos de programación
● Qué buscamos
● Código pálido
● Plan de acción
● Recursos
● Manejadores
● Moviendo recursos
● Estilo C++
● ¿ Preguntas ?
01
CONFIDENTIAL©2015 GlobalLogic Inc.
Manejadores
void f(int n, int x) {
int* p = new Gadget{n}; // look i am a Java programmer !!! :)
// ...
if(x<100) throw std::run_time_error{"Weird!"}; // leak
if(x<200) return; // leak
// ...
delete p; // and i want my garbage collector !!! :(
}
Pregunta 1: ¿ y qué onda si le metemos un garbage collector ?
Respuesta: NO LEAKS !!!
Punteros Locales = poco saludables, inseguros contra excepciones
CONFIDENTIAL©2015 GlobalLogic Inc.
Manejadores
void f(int n, int x) {
shared_ptr<Gadget> p { new Gadget{n} }; // manejar el puntero
// ...
if(x<100) throw std::run_time_error{"Weird!"}; // no leak
if(x<200) return; // no leak
// ...
}
● ¿ por qué un shared_ptr si no estamos compartiendo nada ?
Manejadores de Punteros
CONFIDENTIAL©2015 GlobalLogic Inc.
Manejadores
void f(int n, int x) {
unique_ptr<Gadget> p { new Gadget{n} }; // manejar el puntero
// ...
if(x<100) throw std::run_time_error{"Weird!"}; // no leak
if(x<200) return; // no leak
// ...
}
● ¿ y por qué usar un puntero ?
Manejadores de Punteros Únicos
CONFIDENTIAL©2015 GlobalLogic Inc.
Manejadores
void f(int n, int x) {
Gadget{n}; // crear el objeto
// ...
if(x<100) throw std::run_time_error{"Weird!"}; // no leak
if(x<200) return; // no leak
// ...
}
● Elegante.
● Simple.
● Efectivo.
Manejadores Puros
24 CONFIDENTIAL
Agenda
● Qué es C++
● Estilos de programación
● Qué buscamos
● Código pálido
● Plan de acción
● Recursos
● Manejadores
● Moviendo recursos
● Estilo C++
● ¿ Preguntas ?
01
CONFIDENTIAL©2015 GlobalLogic Inc.
Move Semantics
Matrix* operator+(const Matrix&, const Matrix&);
Matrix &res = *(a+b);
● Poco entendible.
● Horrible al punto de inaceptable.
● … ¿ Quién hace el delete ?
Moviendo grandes datos
CONFIDENTIAL©2015 GlobalLogic Inc.
Move Semantics
Matrix& operator+(const Matrix&, const Matrix&);
Matrix res = a+b;
● Mucho mas entendible.
● Parece elegante.
● ¿ Quién hace el delete ?
● ¿ Cómo hace el delete ?
● ¿ Cómo se entera que tiene que hacer el delete ?
Moviendo grandes datos
- segundo intento -
CONFIDENTIAL©2015 GlobalLogic Inc.
Move Semantics
void operator+(const Matrix&, const Matrix&, Matrix& result);
Matrix res = a+b; // error, la sobrecarga del operador ya no funciona
Matrix res2;
operator+(a,b,res2);
● Entendible pero largo.
● Huele mal.
● Perdimos la opción del operator+.
Moviendo grandes datos
- tercer intento -
CONFIDENTIAL©2015 GlobalLogic Inc.
Move Semantics
Matrix operator+(const Matrix&, const Matrix&);
Matrix res = a+b;
● copiando… no.
● mediante un pool de matrices… no
● moviendo la representación interna !!!
Moviendo grandes datos
- cuarto intento -
CONFIDENTIAL©2015 GlobalLogic Inc.
Move Semantics
Moviendo grandes datos
- cuarto intento -
void f(const Matrix& a, const Matrix& b)
Matrix res = a+b;
// usar matriz sumada
}
Matrix operator+(const Matrix& a, const Matrix& b) {
Matrix r;
// realizar la adición
return r;
}
class Matrix {
Representation rep;
Matrix(Matrix &&a) { // move constructor
rep = a.rep; // mover la representacion interna
a.rep = {}; // limpiar la ubicación original
}
}
30 CONFIDENTIAL
Agenda
● Qué es C++
● Estilos de programación
● Qué buscamos
● Código pálido
● Plan de acción
● Recursos
● Manejadores
● Moviendo recursos
● Estilo C++
● ¿ Preguntas ?
01
CONFIDENTIAL©2015 GlobalLogic Inc.
Estilo C++
● Nunca punteros desnudos
○ Son artefactos de nivel de implementación
○ Mantenerlos fuera de las interfaces
○ Preferir smart pointers - mayormente std::unique_ptr y a veces std::shared_ptr
● Nunca new o delete desnudos
○ Son artefactos de nivel de implementación para manejadores de recursos
● Regresar “por valor” usando move semantics
○ Mantenerse alejado de las referencias
● Mantener el alto nivel
○ STL tiene cero overhead y en algunos puntos corre más rápido que C.
● No bajar de nivel… todavía
○ Sobreoptimización puede llevar a bugs, y usualmente no tiene beneficio alguno.
○ Más código, más complejo, lleva a más errores, más difíciles de descifrar.
● Usar herencia solo para conceptos jerárquicos
○ No forzar OO sobre conceptos claramente no OO
○ Ha sido severamente y sistemáticamente abusado y mal usado.
“Cuando solo tienes un martillo, todo parece un clavo”
32 CONFIDENTIAL
Agenda
● Qué es C++
● Estilos de programación
● Qué buscamos
● Código pálido
● Plan de acción
● Recursos
● Manejadores
● Moviendo recursos
● Estilo C++
● ¿ Preguntas ?
01
©2015 GlobalLogic Inc. CONFIDENTIAL
¿ Preguntas ?
… y gracias por participar.
Contacto:
➔ fernando.farias@globallogic.com
Fuentes:
➔ Software for infrastructure [Stroustrup] http://www.stroustrup.com/Software-for-infrastructure.
pdf
➔ Going Native 2012 Day 1 Keynote [Stroustrup] http://youtu.be/0iWb_qi2-uI

Más contenido relacionado

Similar a Qué es C

Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesJobsket
 
Elementos basicos cpp_oto2014
Elementos basicos cpp_oto2014Elementos basicos cpp_oto2014
Elementos basicos cpp_oto2014joshram
 
Lo que tienes que saber de Dart para Backend, frontend y Mobile..pptx
Lo que tienes que saber de Dart para Backend, frontend y Mobile..pptxLo que tienes que saber de Dart para Backend, frontend y Mobile..pptx
Lo que tienes que saber de Dart para Backend, frontend y Mobile..pptxSergio Antonio Ochoa Martinez
 
Programacion RPG: Conceptos ILE
Programacion RPG: Conceptos ILEProgramacion RPG: Conceptos ILE
Programacion RPG: Conceptos ILEGiovanny Guillen
 
Diapositivs~Elementos_basicos_C.pdf
Diapositivs~Elementos_basicos_C.pdfDiapositivs~Elementos_basicos_C.pdf
Diapositivs~Elementos_basicos_C.pdfFtimaAF
 
Earthly, Dockerfile con esteroides
Earthly, Dockerfile con esteroidesEarthly, Dockerfile con esteroides
Earthly, Dockerfile con esteroidesMario IC
 
Programación de videojuegos con Godot Engine
Programación de videojuegos con Godot EngineProgramación de videojuegos con Godot Engine
Programación de videojuegos con Godot Enginepythoncanarias
 
#PhpirstAid - Replanteamiento de diseño de software
#PhpirstAid - Replanteamiento de diseño de software#PhpirstAid - Replanteamiento de diseño de software
#PhpirstAid - Replanteamiento de diseño de softwareJavier Ferrer González
 
Ponele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu StartupPonele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu StartupMartin Siniawski
 
FUNDAMENTOS PYTHON.ppsx
FUNDAMENTOS PYTHON.ppsxFUNDAMENTOS PYTHON.ppsx
FUNDAMENTOS PYTHON.ppsxFernando Solis
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweekCarlos Ble
 
Programación de Apps con Android – Avanzado por Jorge Pintado
Programación de Apps con Android – Avanzado por Jorge PintadoProgramación de Apps con Android – Avanzado por Jorge Pintado
Programación de Apps con Android – Avanzado por Jorge PintadoCongresoWeb
 
IPython notebook + IRuby - RubyConfAR 2013
IPython notebook + IRuby - RubyConfAR 2013IPython notebook + IRuby - RubyConfAR 2013
IPython notebook + IRuby - RubyConfAR 2013runa
 

Similar a Qué es C (20)

Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agiles
 
Elementosbasicosc
Elementosbasicosc Elementosbasicosc
Elementosbasicosc
 
Elementos basicos cpp_oto2014
Elementos basicos cpp_oto2014Elementos basicos cpp_oto2014
Elementos basicos cpp_oto2014
 
Pucela testingdays testing_en_php
Pucela testingdays testing_en_phpPucela testingdays testing_en_php
Pucela testingdays testing_en_php
 
Lo que tienes que saber de Dart para Backend, frontend y Mobile..pptx
Lo que tienes que saber de Dart para Backend, frontend y Mobile..pptxLo que tienes que saber de Dart para Backend, frontend y Mobile..pptx
Lo que tienes que saber de Dart para Backend, frontend y Mobile..pptx
 
TALLER VIDEOJUEGO 2D
TALLER VIDEOJUEGO 2DTALLER VIDEOJUEGO 2D
TALLER VIDEOJUEGO 2D
 
Programacion RPG: Conceptos ILE
Programacion RPG: Conceptos ILEProgramacion RPG: Conceptos ILE
Programacion RPG: Conceptos ILE
 
Diapositivs~Elementos_basicos_C.pdf
Diapositivs~Elementos_basicos_C.pdfDiapositivs~Elementos_basicos_C.pdf
Diapositivs~Elementos_basicos_C.pdf
 
Earthly, Dockerfile con esteroides
Earthly, Dockerfile con esteroidesEarthly, Dockerfile con esteroides
Earthly, Dockerfile con esteroides
 
Programación de videojuegos con Godot Engine
Programación de videojuegos con Godot EngineProgramación de videojuegos con Godot Engine
Programación de videojuegos con Godot Engine
 
Working with a design system
Working with a design systemWorking with a design system
Working with a design system
 
Decompiladores
DecompiladoresDecompiladores
Decompiladores
 
No quiero vuestra basura en Android
No quiero vuestra basura en AndroidNo quiero vuestra basura en Android
No quiero vuestra basura en Android
 
#PhpirstAid - Replanteamiento de diseño de software
#PhpirstAid - Replanteamiento de diseño de software#PhpirstAid - Replanteamiento de diseño de software
#PhpirstAid - Replanteamiento de diseño de software
 
Ponele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu StartupPonele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu Startup
 
FUNDAMENTOS PYTHON.ppsx
FUNDAMENTOS PYTHON.ppsxFUNDAMENTOS PYTHON.ppsx
FUNDAMENTOS PYTHON.ppsx
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweek
 
Introduccion a Ppython
Introduccion a PpythonIntroduccion a Ppython
Introduccion a Ppython
 
Programación de Apps con Android – Avanzado por Jorge Pintado
Programación de Apps con Android – Avanzado por Jorge PintadoProgramación de Apps con Android – Avanzado por Jorge Pintado
Programación de Apps con Android – Avanzado por Jorge Pintado
 
IPython notebook + IRuby - RubyConfAR 2013
IPython notebook + IRuby - RubyConfAR 2013IPython notebook + IRuby - RubyConfAR 2013
IPython notebook + IRuby - RubyConfAR 2013
 

Último

SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPJosLuisFrancoCaldern
 
CLASE - 01 de construcción 1 ingeniería civil
CLASE - 01 de construcción 1 ingeniería civilCLASE - 01 de construcción 1 ingeniería civil
CLASE - 01 de construcción 1 ingeniería civilDissneredwinPaivahua
 
Rendimiento-de-Maquinaria y precios unitarios para la construcción de una ma...
Rendimiento-de-Maquinaria y precios unitarios  para la construcción de una ma...Rendimiento-de-Maquinaria y precios unitarios  para la construcción de una ma...
Rendimiento-de-Maquinaria y precios unitarios para la construcción de una ma...RichardRivas28
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxClaudiaPerez86192
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)ssuser563c56
 
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESAIPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESAJAMESDIAZ55
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdfvictoralejandroayala2
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxEduardoSnchezHernnde5
 
sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7luisanthonycarrascos
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxMarcelaArancibiaRojo
 
clases de dinamica ejercicios preuniversitarios.pdf
clases de dinamica ejercicios preuniversitarios.pdfclases de dinamica ejercicios preuniversitarios.pdf
clases de dinamica ejercicios preuniversitarios.pdfDanielaVelasquez553560
 
Residente de obra y sus funciones que realiza .pdf
Residente de obra y sus funciones que realiza  .pdfResidente de obra y sus funciones que realiza  .pdf
Residente de obra y sus funciones que realiza .pdfevin1703e
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTFundación YOD YOD
 
Sesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdfSesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdfannavarrom
 
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptMarianoSanchez70
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfMikkaelNicolae
 
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdfCristhianZetaNima
 
Unidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptxUnidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptxEverardoRuiz8
 
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptxguillermosantana15
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfmatepura
 

Último (20)

SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
 
CLASE - 01 de construcción 1 ingeniería civil
CLASE - 01 de construcción 1 ingeniería civilCLASE - 01 de construcción 1 ingeniería civil
CLASE - 01 de construcción 1 ingeniería civil
 
Rendimiento-de-Maquinaria y precios unitarios para la construcción de una ma...
Rendimiento-de-Maquinaria y precios unitarios  para la construcción de una ma...Rendimiento-de-Maquinaria y precios unitarios  para la construcción de una ma...
Rendimiento-de-Maquinaria y precios unitarios para la construcción de una ma...
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptx
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
 
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESAIPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdf
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptx
 
sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docx
 
clases de dinamica ejercicios preuniversitarios.pdf
clases de dinamica ejercicios preuniversitarios.pdfclases de dinamica ejercicios preuniversitarios.pdf
clases de dinamica ejercicios preuniversitarios.pdf
 
Residente de obra y sus funciones que realiza .pdf
Residente de obra y sus funciones que realiza  .pdfResidente de obra y sus funciones que realiza  .pdf
Residente de obra y sus funciones que realiza .pdf
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NIST
 
Sesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdfSesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdf
 
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
 
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
 
Unidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptxUnidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptx
 
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdf
 

Qué es C

  • 1. ©2015 GlobalLogic Inc. CONFIDENTIAL
  • 2. ©2015 GlobalLogic Inc. CONFIDENTIAL Qué es C++ Fernando Farias fernando.farias@globallogic.com Fuentes: ➔ Software for infrastructure [Stroustrup] http://www.stroustrup.com/Software-for-infrastructure. pdf ➔ Going Native 2012 Day 1 Keynote [Stroustrup] http://youtu.be/0iWb_qi2-uI
  • 3. 3 CONFIDENTIAL Agenda ● Qué es C++ ● Estilos de programación ● Qué buscamos ● Código palido ● Plan de acción ● Recursos ● Manejadores ● Moviendo recursos ● Estilo C++ ● ¿ Preguntas ? 01
  • 4. CONFIDENTIAL©2015 GlobalLogic Inc. Es lo mismo que C !!! Muy bajo nivel !!! Lenguaje para sistemas embebidos Punteros y fallas de núcleo Que es C++ Colección de características al azar Lenguaje híbrido Lenguaje de programación de abstracciones livianas
  • 5. CONFIDENTIAL©2015 GlobalLogic Inc. Que es C++ Realidades: ● Nada sirve para todo - X es lo mejor ? en qué contexto ? ● Hardware - un 50% de overhead se traduce en otra granja de servidores ● Confiabilidad - aplicaciones médicas, aeroespaciales, financieras ● Eficiencia - velocidad de procesado, poder de cómputo ● Time to market - esfuerzo para llegar a feature complete, y sin bugs ● Nivel del desarrollador - junior o senior
  • 6. 6 CONFIDENTIAL Agenda ● Qué es C++ ● Estilos de programación ● Qué buscamos ● Código palido ● Plan de acción ● Recursos ● Manejadores ● Moviendo recursos ● Estilo C++ ● ¿ Preguntas ? 01
  • 7. CONFIDENTIAL©2015 GlobalLogic Inc. Estilos de programación ● Estilo C - macros, void*, acceso directo a recursos ● Estilo C++85 - classes, interfaces, objetos ● OO - classes, herencia multiple, polimorfismo ● Estilo C++ - Templates, programación genérica ● Estilo C++11 - Metaprogramming, algoritmos y conceptos
  • 8. 8 CONFIDENTIAL Agenda ● Qué es C++ ● Estilos de programación ● Qué buscamos ● Código palido ● Plan de acción ● Recursos ● Manejadores ● Moviendo recursos ● Estilo C++ ● ¿ Preguntas ? 01
  • 9. CONFIDENTIAL©2015 GlobalLogic Inc. Qué buscamos ● Fácil para humanos y también para herramientas de humanos ● Mantenibilidad, rectitud, exactitud, expresión ● Modularidad, distribuible ● Manejo efectivo de los recursos ● Thread safe, a menos que existan razones para no ● Eficiencia, estructuras de datos compactas ● Portabilidad, a menos que existan razones para no ● Síntesis integrada, que todo trabaje al unísono ● Estándares y guías : estilo
  • 10. 10 CONFIDENTIAL Agenda ● Qué es C++ ● Estilos de programación ● Qué buscamos ● Código pálido ● Plan de acción ● Recursos ● Manejadores ● Moviendo recursos ● Estilo C++ ● ¿ Preguntas ? 01
  • 11. CONFIDENTIAL©2015 GlobalLogic Inc. Código pálido // base : memory to be stored // nmemb : number of elements in memory // size : number of bytes in an element // compar : comparison function void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void*, const void*)); void f(char* arr, int m, double* darr, int n) { qsort(arr, m, sizeof(char*), cmpstringp); qsort(darr, n, sizeof(double), compare_double); } Código pálido = Ineficiente, propenso a errores. ● array que no conoce el número de elementos contenidos ● no sabe como comparar double ● no conoce el tamaño de un double ● sistemáticamente descarta información de utilidad ● llamada a función indirecta es ineficiente ● previene optimizaciones como inline ● necesita más código, genera más oportunidades para bugs ● por eficiencia ?! porque es cool ?! nivel de bits !?
  • 12. 12 CONFIDENTIAL Agenda ● Qué es C++ ● Estilos de programación ● Qué buscamos ● Código pálido ● Plan de acción ● Recursos ● Manejadores ● Moviendo recursos ● Estilo C++ ● ¿ Preguntas ? 01
  • 13. CONFIDENTIAL©2015 GlobalLogic Inc. Plan de Accion ● Mantener las interfaces simples void sort(Container&) ● Mantener las llamadas simples vector<string> vs; sort(vs); ● Performance no se compromete std::sort es más rápido que qsort por grandes factores ● Validación estática de tipos de datos ● No leaks ( y sin gc )
  • 14. CONFIDENTIAL©2015 GlobalLogic Inc. Plan de Accion Enfocarse en las interfaces ● sin especificar void increase_speed(double); // m/s ? km/h ? rectangle(int, int, int, int); // top-down ? bottom-right ? ● bien especificadas void increase_speed(Speed); Rectangle(Point, Point); ● siempre usar interfaces con tipos de datos precisos
  • 15. 15 CONFIDENTIAL Agenda ● Qué es C++ ● Estilos de programación ● Qué buscamos ● Código pálido ● Plan de acción ● Recursos ● Manejadores ● Moviendo recursos ● Estilo C++ ● ¿ Preguntas ? 01
  • 16. CONFIDENTIAL©2015 GlobalLogic Inc. Recursos void f(const char* p) { FILE* f = fopen(p, "r"); // adquisicion de f // ... // usando f // .. fclose(f); // liberar f } ● el código que usa f puede ser muy complejo y olvidar de liberar f ● cualquier excepción puede olvidar liberar f ● el manual dice “todo fopen debe tener su fclose”, pero los compiladores no leen manuales, y muchos programadores tampoco Uso Ingenuo
  • 17. CONFIDENTIAL©2015 GlobalLogic Inc. Recursos void f(const char* p) { FILE* f = 0; try { f = fopen(p, "r"); // adquirir // usar f } catch(...) { if (f) fclose(f); throw; } if (f) fclose(f); // release f } ● más largo ● duplica código ● incluso más propenso a errores Arreglo Ingenuo
  • 18. CONFIDENTIAL©2015 GlobalLogic Inc. Recursos class File_handle { File* p; public: File_handle(const char* pp, const char* r) { p = fopen(pp, r); if (p==0) throw File_error{pp, r}; } ~File_handle() { flose(p); } } void f(string s) { File_handle fh{s, "r"}; // usar fh } ● Liberará el recurso pase lo que pase ● Usamos RAII para memoria, locks, archivos, sockets, threads, y todo lo demas. RAII - Resource Acquisition Is Initialization
  • 19. 19 CONFIDENTIAL Agenda ● Qué es C++ ● Estilos de programación ● Qué buscamos ● Código pálido ● Plan de acción ● Recursos ● Manejadores ● Moviendo recursos ● Estilo C++ ● ¿ Preguntas ? 01
  • 20. CONFIDENTIAL©2015 GlobalLogic Inc. Manejadores void f(int n, int x) { int* p = new Gadget{n}; // look i am a Java programmer !!! :) // ... if(x<100) throw std::run_time_error{"Weird!"}; // leak if(x<200) return; // leak // ... delete p; // and i want my garbage collector !!! :( } Pregunta 1: ¿ y qué onda si le metemos un garbage collector ? Respuesta: NO LEAKS !!! Punteros Locales = poco saludables, inseguros contra excepciones
  • 21. CONFIDENTIAL©2015 GlobalLogic Inc. Manejadores void f(int n, int x) { shared_ptr<Gadget> p { new Gadget{n} }; // manejar el puntero // ... if(x<100) throw std::run_time_error{"Weird!"}; // no leak if(x<200) return; // no leak // ... } ● ¿ por qué un shared_ptr si no estamos compartiendo nada ? Manejadores de Punteros
  • 22. CONFIDENTIAL©2015 GlobalLogic Inc. Manejadores void f(int n, int x) { unique_ptr<Gadget> p { new Gadget{n} }; // manejar el puntero // ... if(x<100) throw std::run_time_error{"Weird!"}; // no leak if(x<200) return; // no leak // ... } ● ¿ y por qué usar un puntero ? Manejadores de Punteros Únicos
  • 23. CONFIDENTIAL©2015 GlobalLogic Inc. Manejadores void f(int n, int x) { Gadget{n}; // crear el objeto // ... if(x<100) throw std::run_time_error{"Weird!"}; // no leak if(x<200) return; // no leak // ... } ● Elegante. ● Simple. ● Efectivo. Manejadores Puros
  • 24. 24 CONFIDENTIAL Agenda ● Qué es C++ ● Estilos de programación ● Qué buscamos ● Código pálido ● Plan de acción ● Recursos ● Manejadores ● Moviendo recursos ● Estilo C++ ● ¿ Preguntas ? 01
  • 25. CONFIDENTIAL©2015 GlobalLogic Inc. Move Semantics Matrix* operator+(const Matrix&, const Matrix&); Matrix &res = *(a+b); ● Poco entendible. ● Horrible al punto de inaceptable. ● … ¿ Quién hace el delete ? Moviendo grandes datos
  • 26. CONFIDENTIAL©2015 GlobalLogic Inc. Move Semantics Matrix& operator+(const Matrix&, const Matrix&); Matrix res = a+b; ● Mucho mas entendible. ● Parece elegante. ● ¿ Quién hace el delete ? ● ¿ Cómo hace el delete ? ● ¿ Cómo se entera que tiene que hacer el delete ? Moviendo grandes datos - segundo intento -
  • 27. CONFIDENTIAL©2015 GlobalLogic Inc. Move Semantics void operator+(const Matrix&, const Matrix&, Matrix& result); Matrix res = a+b; // error, la sobrecarga del operador ya no funciona Matrix res2; operator+(a,b,res2); ● Entendible pero largo. ● Huele mal. ● Perdimos la opción del operator+. Moviendo grandes datos - tercer intento -
  • 28. CONFIDENTIAL©2015 GlobalLogic Inc. Move Semantics Matrix operator+(const Matrix&, const Matrix&); Matrix res = a+b; ● copiando… no. ● mediante un pool de matrices… no ● moviendo la representación interna !!! Moviendo grandes datos - cuarto intento -
  • 29. CONFIDENTIAL©2015 GlobalLogic Inc. Move Semantics Moviendo grandes datos - cuarto intento - void f(const Matrix& a, const Matrix& b) Matrix res = a+b; // usar matriz sumada } Matrix operator+(const Matrix& a, const Matrix& b) { Matrix r; // realizar la adición return r; } class Matrix { Representation rep; Matrix(Matrix &&a) { // move constructor rep = a.rep; // mover la representacion interna a.rep = {}; // limpiar la ubicación original } }
  • 30. 30 CONFIDENTIAL Agenda ● Qué es C++ ● Estilos de programación ● Qué buscamos ● Código pálido ● Plan de acción ● Recursos ● Manejadores ● Moviendo recursos ● Estilo C++ ● ¿ Preguntas ? 01
  • 31. CONFIDENTIAL©2015 GlobalLogic Inc. Estilo C++ ● Nunca punteros desnudos ○ Son artefactos de nivel de implementación ○ Mantenerlos fuera de las interfaces ○ Preferir smart pointers - mayormente std::unique_ptr y a veces std::shared_ptr ● Nunca new o delete desnudos ○ Son artefactos de nivel de implementación para manejadores de recursos ● Regresar “por valor” usando move semantics ○ Mantenerse alejado de las referencias ● Mantener el alto nivel ○ STL tiene cero overhead y en algunos puntos corre más rápido que C. ● No bajar de nivel… todavía ○ Sobreoptimización puede llevar a bugs, y usualmente no tiene beneficio alguno. ○ Más código, más complejo, lleva a más errores, más difíciles de descifrar. ● Usar herencia solo para conceptos jerárquicos ○ No forzar OO sobre conceptos claramente no OO ○ Ha sido severamente y sistemáticamente abusado y mal usado. “Cuando solo tienes un martillo, todo parece un clavo”
  • 32. 32 CONFIDENTIAL Agenda ● Qué es C++ ● Estilos de programación ● Qué buscamos ● Código pálido ● Plan de acción ● Recursos ● Manejadores ● Moviendo recursos ● Estilo C++ ● ¿ Preguntas ? 01
  • 33. ©2015 GlobalLogic Inc. CONFIDENTIAL ¿ Preguntas ? … y gracias por participar. Contacto: ➔ fernando.farias@globallogic.com Fuentes: ➔ Software for infrastructure [Stroustrup] http://www.stroustrup.com/Software-for-infrastructure. pdf ➔ Going Native 2012 Day 1 Keynote [Stroustrup] http://youtu.be/0iWb_qi2-uI