Estructuras de Datos y Programación Orientada a Objetos: Árboles, Grafos, Paradigmas y C++

Informática5,39 KB

Estructuras de datos: árboles y grafos

ÁRBOL: estructura jerárquica con nodos dinámicos del mismo tipo.

  • NODO RAÍZ: único en el primer nivel.
  • TERMINAL (HOJA): nodos sin descendientes.
  • ALTURA o PROFUNDIDAD: número de niveles.

Árboles binarios

BINARIO: cada nodo solo puede tener 0, 1 o 2 descendientes.

  • PREORDEN
  • INORDEN
  • POSTORDEN

Grafos

GRAFO: compuesto por nodos y aristas.

  • ARISTA: determina el PESO.
  • DIRIGIDO: tiene sentido para cada peso.
  • NO DIRIGIDO: no es jerárquico.

Representaciones

  • MATRIZ DE ADYACENCIA: simétrica y con diagonal si no es dirigido; relaciona nodos con pesos.
  • LISTA ENLAZADA: tantas como nodos.

Paradigmas de programación

Paradigma imperativo

IMPERATIVO: instrucciones secuenciales que cambian la dirección de memoria. Ejemplos: FORTRAN, COBOL, Pascal, C, Ada, Modula-2 (modularidad, encapsulamiento, no herencia).

Paradigma declarativo

DECLARATIVO: se centra en el qué y no en el cómo. Ejemplos: Hope, Miranda, Haskell, Prolog (cláusulas), Lisp (antiguo de alto nivel, listas, no destructivo, inteligencia artificial).

Paradigma orientado a objetos

  • ENCAPSULACIÓN: datos ocultos, solo accesibles desde los métodos (private, protected) y dentro de la clase.
  • ABSTRACCIÓN DE DATOS: no se conoce cómo se implementa; se utilizan las operaciones definidas para ese tipo de dato.
  • POLIMORFISMO: distintas funciones con el mismo nombre se distinguen por la firma (número o tipo de argumentos; no por el valor devuelto).
  • HERENCIA: atributos y métodos propios más heredados de la base. Lenguajes: Smalltalk, C++, Java.

Lenguajes de programación

  • JAVA: multiplataforma, orientado a red; 80% compilado y 20% interpretado (bytecode ejecutado por la máquina virtual).
  • PERL: script (interpretado).
  • PHP: web.
  • FORTRAN: matemáticas.
  • COBOL: gestión.
  • PYTHON: interpretado.
  • PASCAL: propósito general (compilado).
  • OBJECTIVE-C: desarrollo GNU, orientado a objetos.
  • XML: marcado.
  • DELPHI: herramienta de desarrollo.

Ejemplos en C++

Clase con encapsulación y amistad

class Dai {
 public:
  Dai(char* = "");
  Dai(Dai&);
  ~Dai();
  const char* lee() const;
  void inser(char*);
  friend class Modulo;
 private:
  char* asig;
};

Clase amiga con acceso a datos privados

class Mod {
 public:
  void min(Dai&);
 private:
};

void Modulo::min(Dai& v) {
  if (v.asi < 1) cout << "NO";
}

main() {
  Dai pri;
  Mod des;
  des.min(pri);
}

Herencia

class Mod : public Dai {
 public:
  void inserta(char*);
 private:
};

main() {
  Mod pri;
  pri.inser;
  pri.inserta;
}

Para herencia múltiple se usa :: para diferenciar los miembros.

Mod::Mod(char*) : Dai(asi) {
  m = new char;
}

void Mod::carga(char* m, char* asi) {
  Dai::carga(asi);
  delete[] m;
  m = new char[strlen(asi) + 1];
  strcpy(m, asi);
}

Funciones virtuales y polimorfismo

class Ani {
  virtual void cm();
};

class Lob : public Ani {
  virtual void cm();
};

Ani* v[2];
v[0] = new Ani;
v[1] = new Lob;
v[0]->cm();
v[1]->cm();

Sobrecarga de operadores

int operator==(Dai);

int Dai::operator==(Dai v) {
  if (v.asi == asi) return 1;
  else return 0;
}

Dai& operator=(Dai);

Dai& Dai::operator=(Dai v) {
  if (v == *this) return *this;
  else asi = v.asi;
  return *this;
}

int operator+(Dai);

int Dai::operator+(Dai v) {
  return asi + v.asi;
}

const char* Dai::lee() const {
  return asi;
}

Operadores que no pueden sobrecargarse: ., ?:, .*, :: y sizeof.

Conceptos adicionales de C++

  • CLASE ABSTRACTA: sin objetos propios; solo se hereda.
  • FUNCIÓN VIRTUAL PURA: sin código; vinculación dinámica en tiempo de ejecución.
  • ENTRADA/SALIDA: cout.setf(ios::left); cout << ""; cout.unsetf(ios::left);
  • HERENCIA MÚLTIPLE: puede generar ambigüedad; usar :: para evitarla.
  • ACCESO EN HERENCIA: si la base es privada, en la derivada es inaccesible; prevalece siempre el nivel de acceso más restrictivo.
  • MÉTODOS INSPECTORES: devuelven información sin modificar el objeto.
  • INLINE: ahorra tiempo en la llamada al evitar la sobrecarga del cambio de contexto, a costa de aumentar el tamaño del código. Puede ser método o función amiga; sobrecarga las macros y no permite el paso de parámetros.

Descargar

PDF Word HTML