Buscar en el Blog

sábado, 25 de abril de 2015

C++/OOP UN ENFOQUE PRÁCTICO



RICARDO DEVIS BOTELLA
Paginas 297


Es costumbre que las primeras líneas de un texto procuren, de alguna manera, al lector una suerte de explicación del talante y ánimo del autor al escribir la obra que tiene ante sí. Bien: he aquí un enésimo libro sobre C++ y -¿cómo no?- sobre Programación Orientada a Objetos. De acuerdo, pensará el lector, pero ¿por qué éste y no otro?; o mejor, ¿qué tiene de especial el presente texto? Y la respuesta es... ¡una intención eminentemente didáctica! Lo que se pretende es introducir al lector en los esquemas básicos de la programación orientada-a-objetos -que en adelante llamaremos OOP a través del uso de un lenguaje de amplia aceptación industrial, cual es C++. La aproximación será, sobre todo, práctica: procuraré no perderme en la maraña de siglas y conceptos que pueblan esta metodología y que frecuentemente desaniman al principiante, de forma que, tras el inevitable discurso teórico, siempre se buscará la aplicación concreta de lo expuesto mediante código en C++. Se trata, pues, de una introducción al lenguaje
C++, pero, atención, utilizando de forma inseparable las técnicas y conceptos de OOP. El texto también quiere ser, por fin, ameno y, en lo posible, divertido: la tradición norteamericana de obras en las que el rigor no está reñido con un cierto humor, en ocasiones salvaje, será aquí observada con cierta complacencia. El tono será, pues, desenfadado pero exacto: a veces elemental, a veces no tanto.

Producir Software de Código Abierto


Como Llevar a Buen Puerto un Proyecto de Código Libre
Karl Fogel
Rafael Martilotti
Alejandro Ayuso
José Manuel Puerta Peña
Pedro Andrés Bonilla Polo
Aldo Vadillo Batista
Francisco Urbano García
Christian López Espínola
Emilio Casbas Jimenez

Paginas 201


jueves, 16 de abril de 2015

PowerBuilder: Evento Change en EditMask

En nuestras aplicaciones a veces necesitamos codificar en un evento en donde cada vez que cambie el valor se ejecute dicho codigo, como por ejemplo para calcular el total a pagar o para realizar una busqueda segun se ingrese el texto a buscar(no recomendado cuando se tiene muchos registros). En el caso del control EditMask, tenemos el evento Modified, el cual solo se ejecuta cuando presionamos enter. Este evento no se ejecuta si usamos las flechas para incrementar o decrementar el valor(cuando se esta usando spin). Para solucionar este problema crearemos un nuevo evento.



Seleccionamos el evento pbm_enchange


A este nuevo evento le podemos poner cualquier nombre que no este en use. Para este caso le colocare ue_change.

En este nuevo evento ya podemos codificar nuestro codigo.

 

jueves, 2 de abril de 2015

Tips de PowerBuilder: Columna de Solo lectura - Datawindow


Si queremos colocar una columna de solo lectura en un datawindow necesitamos colocar el siguiente codigo.

dw.modify("stock.protect=1")


En donde el "dw" es el nombre del datawindow y "stock" es el nombre de la columna. Si queremos que sea nuevamente editable cambiamos el numero uno por un cero.

dw.modify("stock.protect=0")

¿En que casos puedo usarlo?
Por ejemplo, realizamos una insercion de un registro y este tiene el campo fecha_ingreso, el cual solo sera editable cuando se realice la insercion, pero cuando se este editando el datawindow no sera editable. En otras palabras, cuando ingresen un nuevo registro ingresaran la fecha de ingreso, cuando quieran editarlo, estara deshabilitada esa columna.




domingo, 15 de marzo de 2015

Cadena de Conexion PowerBuilder a Sql Server 2008 por ODBC

Cuando queremos conectarnos por ODBC desde PowerBuilder al Servidor de Base de Datos, podemos hacerlo de muchas formas: Creando el DSN a traves del asistente de origenes de datos o estableciendo la cadena de conexion en el codigo. Hoy veremos la segunda opcion.




// Profile BUFFALOBEEF
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='Driver={SQL Server Native Client 10.0};Server=192.168.1.30;Database=buffalobeef;Uid=sa;Pwd=sanissi;"


En donde:
SQL Server Native Client 10.0

Es el driver para conectarnos al servidor, el cual puede ser descargado desde aqui segun la version del sistema operativo que usen.

Server=192.168.1.30

  Esta linea indica la ip del servidor, en mi caso era 192.168.1.30

Database=buffalobeef;

 Nombre de la base de datos

 Uid=sa;Pwd=sanissi;"
Uid=usuario y Pwd seria la contraseña.


Para que una aplicacion funcione en una maquina cliente, debe tener instalado las librerias de PowerBuilder, ademas del driver de conexion de la base de datos.





viernes, 13 de marzo de 2015

UML 2 Ejemplos y Ejercios





Iniciación, ejemplos y ejercicios corregidos [3ª edición]

Este libro sobre UML 2 está dirigido tanto a estudiantes como adesarrolladores que se ocupan
del modelado de sistemas, de programas y de procesos.
Etapa a etapa, el lector descubrirá los elementos de modelado a partir de ejemplos pedagógicos
extraídos del mundo de los caballos. Tras unaintroducción a la orientación a objetos, la obra
presenta los diferentes diagramas de UML 2, desde la descripción de los requisitos a partir de
casos de uso, hasta el diagrama de componentes pasando por losdiagramas de interacción, de
clases, de estructura compuesta, de estados transiciones y de actividades. El lector aprenderá
de qué manera los diagramas de interacción pueden utilizarse para descubrir los objetos que
componen el sistema.
Esta nueva edición de la obra introduce los diagramas de perfil.
Los capítulos del libro:
Introducción – A propósito de UML – Conceptos de la orientación a objetos – Modelado de los
requisitos – Modelado de la dinámica – Modelado de objetos – Estructuración de los elementos de
modelado – Modelado del ciclo de vida de los objetos – Modelado de las actividades – Modelado
de la arquitectura del sistema – Los perfiles – Anexo 1: Arquitectura MDA: la herramienta DB-MAIN
– Anexo 2: Corrección de los ejercicios – Anexo 3: Glosario – Anexo 4: Léxico – Anexo 5: Notación
gráfica – Anexo 6: Bibliografía



martes, 3 de marzo de 2015

Qt C++ Capturar la tecla presionada - Keypress

Agregamos la siguiente linea en el archivo de cabecera para reimplementar la funcion eventFilter.

//Filtrar los eventos
bool eventFilter(QObject *obj, QEvent *event);

en el archivo cpp implementamos la funcion.

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
     //Si el evento es del Tipo Keypress
    if (event->type() == QEvent::KeyPress) {
    //Hacemos un Cast
    QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
    qDebug("Tecla Presionada %d", keyEvent->key());
    return true;
    } else {
    // 
    return QObject::eventFilter(obj, event);
    }
}
Ademas incluir en el archivo cpp los siguientes archivos.



#include <QKeyEvent>
#include <QDebug>


 
 
 
Ahora vamos instalar el eventFilter, es decir, en que objecto queremos hacer 
el filtro  de eventos. Para eso colocamos la siguiente linea de codigo en el
constructor de la clase.
 
 ui->lineEdit->installEventFilter(this);
 
 
 
 
Entonces el archivo quedaria asi.
 

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDebug>
#include <QKeyEvent>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{


    ui->setupUi(this);
   


 ui->lineEdit->installEventFilter(this);
}


MainWindow::~MainWindow()
{
    delete ui;
}




bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if (event->type() == QEvent::KeyPress) {
    //and here put your own logic!!
    QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
    qDebug("Ate key press %d", keyEvent->key());
    return true;
    } else {
    // standard event processing
    return QObject::eventFilter(obj, event);
    }
}

Al Ejecutar y digitar en la aplicacion en la ventana Output debe salir un resultado 
similar al de la siguiente imagen.




Nota: EL Debug sirve para mostrar los resultados en la consola de Qt Creator