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 Charla 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 Charla 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
 
Elementos basicos cpp_oto2014
Elementos basicos cpp_oto2014Elementos basicos cpp_oto2014
Elementos basicos cpp_oto2014
 
Elementosbasicosc
Elementosbasicosc Elementosbasicosc
Elementosbasicosc
 
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

UC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdfUC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdfrefrielectriccarlyz
 
Presentación_ Marco general de las contrataciones públicas.pdf
Presentación_ Marco general de las contrataciones públicas.pdfPresentación_ Marco general de las contrataciones públicas.pdf
Presentación_ Marco general de las contrataciones públicas.pdffernandolozano90
 
Arquitecto cambio de uso de suelo Limache
Arquitecto cambio de uso de suelo LimacheArquitecto cambio de uso de suelo Limache
Arquitecto cambio de uso de suelo LimacheJuan Luis Menares
 
Métodos numéricos y aplicaciones - Izar Landeta.pdf
Métodos numéricos y aplicaciones - Izar Landeta.pdfMétodos numéricos y aplicaciones - Izar Landeta.pdf
Métodos numéricos y aplicaciones - Izar Landeta.pdfJuvenalriv
 
Balance materia y energia procesos de Secado
Balance materia y energia procesos de SecadoBalance materia y energia procesos de Secado
Balance materia y energia procesos de SecadoGualbertoLopez2
 
Myoelectric_Control_for_Upper_Limb_Prostheses.en.es (2).pdf
Myoelectric_Control_for_Upper_Limb_Prostheses.en.es (2).pdfMyoelectric_Control_for_Upper_Limb_Prostheses.en.es (2).pdf
Myoelectric_Control_for_Upper_Limb_Prostheses.en.es (2).pdfFtimaMontserratZaraz
 
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALESCAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALESJHONJAIROVENTURASAUC
 
Matematica Basica Limites indeterminados
Matematica Basica Limites indeterminadosMatematica Basica Limites indeterminados
Matematica Basica Limites indeterminadosSALVADOR ALTEZ PALOMINO
 
Trabajos Preliminares en Obras de Construcción..pdf
Trabajos Preliminares en Obras de Construcción..pdfTrabajos Preliminares en Obras de Construcción..pdf
Trabajos Preliminares en Obras de Construcción..pdfLimbergleoMamaniIsit
 
ESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptx
ESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptxESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptx
ESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptxholferpandiacondori
 
3er Informe Laboratorio Quimica General (2) (1).pdf
3er Informe Laboratorio Quimica General  (2) (1).pdf3er Informe Laboratorio Quimica General  (2) (1).pdf
3er Informe Laboratorio Quimica General (2) (1).pdfSantiagoRodriguez598818
 
S06_s2+-+Centro.pdf qiieiejanahshsjsnndjd
S06_s2+-+Centro.pdf qiieiejanahshsjsnndjdS06_s2+-+Centro.pdf qiieiejanahshsjsnndjd
S06_s2+-+Centro.pdf qiieiejanahshsjsnndjdaeapolinarez
 
Riesgos taller mecanico prevencion de accidentes de trabajo
Riesgos taller mecanico prevencion de accidentes de trabajoRiesgos taller mecanico prevencion de accidentes de trabajo
Riesgos taller mecanico prevencion de accidentes de trabajoMarianoSanchez70
 
Tipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosTipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosandersonsubero28
 
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdfNTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdfELIZABETHCRUZVALENCI
 
1.1 Los 14 principios del Toyota Way -2024.pdf
1.1 Los 14 principios del Toyota Way -2024.pdf1.1 Los 14 principios del Toyota Way -2024.pdf
1.1 Los 14 principios del Toyota Way -2024.pdfThe16Frame
 
IG01 Instalacion de gas, materiales, criterios, recomendaciones
IG01 Instalacion de gas, materiales, criterios, recomendacionesIG01 Instalacion de gas, materiales, criterios, recomendaciones
IG01 Instalacion de gas, materiales, criterios, recomendacionesPardoGasca
 
dokumen.tips_311-determinacion-del-espacio-estatico.pptx
dokumen.tips_311-determinacion-del-espacio-estatico.pptxdokumen.tips_311-determinacion-del-espacio-estatico.pptx
dokumen.tips_311-determinacion-del-espacio-estatico.pptxQualityAdviceService
 
metodos de fitomejoramiento en la aolicacion de plantas
metodos de fitomejoramiento en la aolicacion de plantasmetodos de fitomejoramiento en la aolicacion de plantas
metodos de fitomejoramiento en la aolicacion de plantasGraciaMatute1
 
Sistema de alumbrado.pptx fjhhgghrhgghhuughuh
Sistema de alumbrado.pptx fjhhgghrhgghhuughuhSistema de alumbrado.pptx fjhhgghrhgghhuughuh
Sistema de alumbrado.pptx fjhhgghrhgghhuughuhFoxy963
 

Último (20)

UC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdfUC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdf
 
Presentación_ Marco general de las contrataciones públicas.pdf
Presentación_ Marco general de las contrataciones públicas.pdfPresentación_ Marco general de las contrataciones públicas.pdf
Presentación_ Marco general de las contrataciones públicas.pdf
 
Arquitecto cambio de uso de suelo Limache
Arquitecto cambio de uso de suelo LimacheArquitecto cambio de uso de suelo Limache
Arquitecto cambio de uso de suelo Limache
 
Métodos numéricos y aplicaciones - Izar Landeta.pdf
Métodos numéricos y aplicaciones - Izar Landeta.pdfMétodos numéricos y aplicaciones - Izar Landeta.pdf
Métodos numéricos y aplicaciones - Izar Landeta.pdf
 
Balance materia y energia procesos de Secado
Balance materia y energia procesos de SecadoBalance materia y energia procesos de Secado
Balance materia y energia procesos de Secado
 
Myoelectric_Control_for_Upper_Limb_Prostheses.en.es (2).pdf
Myoelectric_Control_for_Upper_Limb_Prostheses.en.es (2).pdfMyoelectric_Control_for_Upper_Limb_Prostheses.en.es (2).pdf
Myoelectric_Control_for_Upper_Limb_Prostheses.en.es (2).pdf
 
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALESCAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
 
Matematica Basica Limites indeterminados
Matematica Basica Limites indeterminadosMatematica Basica Limites indeterminados
Matematica Basica Limites indeterminados
 
Trabajos Preliminares en Obras de Construcción..pdf
Trabajos Preliminares en Obras de Construcción..pdfTrabajos Preliminares en Obras de Construcción..pdf
Trabajos Preliminares en Obras de Construcción..pdf
 
ESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptx
ESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptxESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptx
ESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptx
 
3er Informe Laboratorio Quimica General (2) (1).pdf
3er Informe Laboratorio Quimica General  (2) (1).pdf3er Informe Laboratorio Quimica General  (2) (1).pdf
3er Informe Laboratorio Quimica General (2) (1).pdf
 
S06_s2+-+Centro.pdf qiieiejanahshsjsnndjd
S06_s2+-+Centro.pdf qiieiejanahshsjsnndjdS06_s2+-+Centro.pdf qiieiejanahshsjsnndjd
S06_s2+-+Centro.pdf qiieiejanahshsjsnndjd
 
Riesgos taller mecanico prevencion de accidentes de trabajo
Riesgos taller mecanico prevencion de accidentes de trabajoRiesgos taller mecanico prevencion de accidentes de trabajo
Riesgos taller mecanico prevencion de accidentes de trabajo
 
Tipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosTipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplos
 
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdfNTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
 
1.1 Los 14 principios del Toyota Way -2024.pdf
1.1 Los 14 principios del Toyota Way -2024.pdf1.1 Los 14 principios del Toyota Way -2024.pdf
1.1 Los 14 principios del Toyota Way -2024.pdf
 
IG01 Instalacion de gas, materiales, criterios, recomendaciones
IG01 Instalacion de gas, materiales, criterios, recomendacionesIG01 Instalacion de gas, materiales, criterios, recomendaciones
IG01 Instalacion de gas, materiales, criterios, recomendaciones
 
dokumen.tips_311-determinacion-del-espacio-estatico.pptx
dokumen.tips_311-determinacion-del-espacio-estatico.pptxdokumen.tips_311-determinacion-del-espacio-estatico.pptx
dokumen.tips_311-determinacion-del-espacio-estatico.pptx
 
metodos de fitomejoramiento en la aolicacion de plantas
metodos de fitomejoramiento en la aolicacion de plantasmetodos de fitomejoramiento en la aolicacion de plantas
metodos de fitomejoramiento en la aolicacion de plantas
 
Sistema de alumbrado.pptx fjhhgghrhgghhuughuh
Sistema de alumbrado.pptx fjhhgghrhgghhuughuhSistema de alumbrado.pptx fjhhgghrhgghhuughuh
Sistema de alumbrado.pptx fjhhgghrhgghhuughuh
 

Charla 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