públicos - Departamento de Ciencias e Ingeniería de la Computación

Anuncio
Tecnología de Programación
Diego C. Martínez
Departamento de Ciencias e Ingeniería de la Computación
Universidad Nacional del Sur
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Lenguajes orientados a objetos
Las ideas de la orientación a objetos no se limitan al código sino que procuran
gobernar todo el proceso de construcción del software.
analistas
diseñadores
programadores
testers
Por esa razón, el lenguaje de programación utilizado debe acompañar el esfuerzo
inicial permitiendo respetar el paradigma.
Antes de profundizar sobre la orientación a objetos, veamos brevemente algunos
lenguajes de programación populares.
Nos centraremos en aquellas características orientadas a objetos que ya
nos son familiares (clases, objetos, herencia, polimorfismo).
A medida que conozcamos más del paradigma, iremos haciendo referencia
a detalles de implementación en algunos de estos lenguajes.
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Algunos de los lenguajes existentes....
1C 1.PAK 2.PAK 20-GATE 3APL 473L Query 51-FORTH 4D A+ A++ A# .NET A# (Axiom) A-0 ABAP - Advanced Business Application Programming ABC ABC ALGOL ABLE ABSET
ABSYS ACC Accent Ace DASL ACT-III Action! ACS - Action Code Script ActionScript Actor Ada - ISO/IEC 8652 ADMINS - Automated Data Methods for Information Naming
Systems [1] ADS/Online AdvPL Afnix - Previously known as Aleph AID Algebraic Interpretive Dialogue Aikido AIMMS AION Alan ALC Assembly Language Common, IBM
acronym for BAL Basic assembly language Aldor Alef - concurrent language used in early versions of Plan 9 Algae ALGO ALGOL - ALGOrithmic Language Alice Alphard AmigaE
conventional architectures
architectures Arc
Arc - A Lisp dialect AREXX
AMOS AMPL ApeScript APL - ISO 8485 AppleScript Apply - A domain-specific language for image processing on parallel or conventional
- Amiga version of REXX scripting language ARS++ Active Server Pages AsmL - The Abstract State Machine Language from Microsoft ASP AspectJ Assembly language ATLAS
Atlas Autocode ATOLL - Acceptance, Test Or Launch Language Aubit-4GL Autocoder AutoHotkey AutoIt AutoLISP Averest AWK - Also derivatives gawk, mawk, and nawk Axiom
Axiom-XL B BACI Baja BASIC - Beginners All-purpose Symbollic Instruction Code - See also List of BASIC dialects (by platform) bc bcompile BCPL BeanShell BETA Bigwig Big
Snake Bistro BLISS Blitz Basic Block And List Manipulation (BALM) Blue - Rejected prototype for Ada Blue Boo Bourne shell - a.k.a sh Bourne-Again shell - see Bash Boxx BPEL Business Process Execution Language Brainfuck BUGSYS BuildProfessional BYOND C C-- C-script C++ - ISO/IEC 14882 C# - ISO/IEC 23270 C shell (csh) Caché ObjectScript - See
also Caché Basic Caml Cat Cayenne C-BOT Cecil Cesil Cg Ch interpreter (C/C++ interpreter Ch) Chapel CHAIN Charity Chef Chey CHILL CHIP-8 chomski Chrome ChucK Cilk CICS
environment CLU
CLU CMS-2
CMS-2 COBOL - ISO/IEC 1989 o CobolScript Cobra CODE
CL Clarion Clean Clipper CLIST - Programming language for online applications in the MVS TSO environment
ColdFusion COMAL Common Intermediate Language (CIL) Common Lisp Component Pascal COMIT - List or string processing language Concurrent Clean Constraint Handling
Rules CORAL66 Corn CorVision COWSEL CPL CSP Csound Cue Curl Curry Cyclone D Dao DASL - Distributed Application Specification Language DASL - Datapoint's Advanced
Systems Language DarkBASIC DarkBASIC Professional Dataflex Datalog dBASE dc Deesel (formerly G) Delphi Dialect DCL Dialog Manager DIBOL DL/I Dream Maker Dylan
Dynace Ease EASY Easy PL/I EASYTRIEVE PLUS eC (Ecere C) ECMAScript eDeveloper Edinburgh IMP Einstein Eiffel Elan elastiC Elf Emacs Lisp EGL Programming Language (EGL)
Epigram Erlang Escapade - server-side programming Esterel Euclid Euphoria Euler EXEC EXEC2 F F# Factor Fan Felix Ferite F# FL FLOW-MATIC FOCAL FOCUS FOIL FORMAC
Formula language Forth Fortran - ISO/IEC 1539 Fortress FoxPro FP Frag Script Franz Lisp Frink Frontier F-Script Gambas G-code General Algebraic Modeling System Generic
Java Gibiane G (LabVIEW) Gödel Godiva GOTRAN (see IBM 1620) GPSS GraphTalk GRASS Green Groovy H HAL/S HAScript Haskell HDL High Level Assembly (HLA) Hoc Hugo
HyperTalk HTML[2] IBM Basic assembly language IBM RPG ICI Icon IDL IMP Inform IPL Informix-4GL INTERCAL Io IPTSCRAE J J# J++ JADE JAG Jal Janus Java JavaScript Jim++ JCL
JoeBASIC Join Java JOSS Joule JOVIAL Joy JScript JSP J2EE J2ME K KEE Kiev Korn Shell KIF Kite Kogut KRC KRL KRYPTON LabVIEW Lagoona LANSA Lasso Lava Leda Lead
Leadwerks Script Legoscript Leopard Lexico Lfyre Liberty BASIC Limbo Limnor LINC Lingo Lisaac Lisp - ISO/IEC 13816 Lite-C Logo LOLCODE LPC LSL LSE Lua Lucid Lush Lustre
LYaPAS M4 MAD MADCAP MAGIC - See eDeveloper Magik Magma MapBasic Maple MAPPER (Unisys/Sperry) now part of BIS M-A-R-E-K (Programming language) MARK-IV
(Sterling/Informatics) now VISION:BUILDER of CA Mary Mathematica Matlab MATA Maxima (see also Macsyma) MaxScript internal language 3D Studio Max Maya (MEL)
Multiprocessor C# Mercury Mesa METAL Michigan Algorithm Decoder see MAD programming language Microcode MicroScript MillScript MIMIC Mindscript Miranda Miva ML
Moby MODCAP Model 204 User Language Modula Modula-2 Modula-3 Mondrian Mortran Moto MOUSE MSIL - Deprecated name for Common Intermediate Language MSL
MUMPS Napier88 Natural Nemerle NESL Net.Data Neuralware NewtonScript NGL Nial Nice Nickle Nosica NQC Nu programming language o:XML Oberon Objective Modula-2
Object Lisp ObjectLOGO Object Pascal Objective-C Objective Caml Obliq Objectstar ObjectView Ocaml occam occam-p Octave OmniMark Opal Open programming language
OPS5 Organiser Programming Language (OPL) - cf. Psion Organiser Oxygene Oz PARI/GP Parser Pascal - ISO 7185 Pawn PBASIC PCASTL PEARL Perl o Perl Data Language PHP
Pico Piet Pike PIKT PILOT Pizza PL 11 PL/0 PL/8 PL/B PL/C PL/I - ISO 6160 PL/M PL/P PL/SQL Plankalkül PLD Pliant PNGlish PPL POP-11 Poplog PORTRAN POSIX PostScript POVRay PowerBASIC Ppc++ Processing Prograph Progress 4GL Prolog o Turbo Prolog Promela Protheus PRO-IV Python Q Qi QtScript QuakeC QPL Quikcomp (for the Moonrobot XI)
R R++ - Based on C++ and added semanteme description Rascal Ratfiv Ratfor RBScript rc REALbasic REPL - Really Easy Programming Language REBOL - Relative Expression
Based Object Language Red - Rejected prototype for Ada Redcode REDO REFAL Revolution REXX Rigal Rlab Robot Scripting Language (RSL) RPG - Report Program Generator
RPL Ruby Russell Programming Language S S2 S-PLUS S-Lang SAIL SAKO SAM76 SAS Sather Scala ScalPL SCAR SCATRAN Scheme Scilab Script.NET Sed Seed7 Self SETL Shadow
Programming Interface (Developing) Shift Script SIGNAL SiMPLE SIMPOL SIMSCRIPT Simula SISAL Slate SLIP SMALL - SMALL Machine Algol Like Language Small Smalltalk
SNOBOL - String Oriented Symbolic Language o SPITBOL Snowball SPARK Spice SPIN SP/k SPL/1 - aka SPL/I SPS (1620) - see IBM 1620 Squirrel SR SSL Standard ML StringLang
Subtext SuperCollider Suneido SYMPL SyncCharts Synergy/DE SystemVerilog T TACL TACPOL TagsMe TADS TIE Transaction Application Language Tcl Transact-SQL teco
TELCOMP Telon Tempo thinBasic Titanium TI-Basic Today Tom TOM Topspeed - see Clarion TorqueScript tpu Trac Trine TTCN Turbo Pascal Turing TUTOR Tutorial D TXL
Ubercode Ultra 32 Unicon Uniface Unix shell Unlambda UnrealScript Use V Vala Verilog VHDL Visual Assembler Visual Basic - Visual Beginners All-purpose Symbolic Instruction
Code Visual Basic .NET Visual DataFlex Visual DialogScript Visual FoxPro Visual J++ Visual Objects VBScript VX-REXX Water WATFOR - see WATFIV WATFIV WAXHTML WebQL
Whitespace
Winbatch
WinDev Windows
PowerShell
X10 XBL xbScript
- Also xBaseScript
xHarbour
Departamento
de Ciencias
e Ingeniería
de laX++
Computación
- Universidad
Nacional
del XL
SurXOTcl XPL XPL0 XQuery XSLT - See XPath Y YACC YAFL Yellow -
Arbol genealógico de lenguajes de programación
Primer astronauta 
Asesinato de JFK 
Guerra de Vietnam 
El hombre llega a la luna 
Se construye el WTC 
Nace Microsoft 
Nace Apple 
Se inventa el CD 
USSR lanza la MIR 
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Lenguajes Orientados a Objetos
Los lenguajes orientados a objetos (LOO) pueden clasificarse en dos grandes grupos:
• Lenguajes basados en clases (Class-Based Languages)
• Lenguajes basados en objetos (Object-Based Languages)
Los lenguajes basados en clases forman el grupo mayoritario de los LOO, e incluye a
los más populares.
Entre ellos, están los “históricos”
- Simula, considerado primer lenguaje orientado a objetos.
- Smalltalk, el primer lenguaje orientado a objetos con tipeo dinámico.
- C++, descendiente de Simula, y ampliamente utilizado en la industria.
- Java
Analizaremos las propiedades básicas de este grupo de lenguajes.
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Lenguajes basados en clases
Los lenguajes basados en clases (LBC) se centran en la noción de clase como
descripción de los objetos.
Una clase describe la estructura de todos los objetos generados a partir de esa clase.
Ejemplo
get() {
Celda
contenido: entero
return contenido;
}
get(): entero;
set(n:entero);
set() {
contenido=n;
}
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Lenguajes basados en Clases
Los objetos son producidos a partir de la clase, la cual se interpreta como un
esquema estructural de los objetos.
La mayoría de los lenguajes poseen creación explícita de objetos, por medio de
operaciones especiales denominadas constructores.
Los constructores inician implicitamente el proceso de creación física del objeto
(memoria) y proveen algunas sentencias de inicialización.
celdita  new Celda()
En algunos lenguajes los objetos pueden destruirse por medio de operaciones
especiales denominadas destructores, que inician el proceso de eliminación del
objeto del sistema.
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Lenguajes basados en Clases
La destrucción de los objetos puede ser explícita (con operadores como dispose) o
implícita (garbage collector). En ambos casos el destructor es invocado.
C++ permite la definición de destructores y Java posee el servicio finalize() en la
clase Object.
Usualmente los objetos suelen manipularse por medio de referencias (semántica
por referencia) aunque algunos lenguajes admiten objetos expandidos (semántica
por valor).
- Java utiliza únicamente referencias.
- Eiffel permite objetos por valor (subobjetos).
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Lenguajes basados en objetos
Los lenguajes basados en objetos pretenden ser más simples y más flexibles que
los lenguajes basados en clases.
Aunque existen varios lenguajes, sólo uno es muy populares en la industria.
Proveen únicamente la noción de objeto y despacho dinámico.
No existe la noción de clase y por ende la de constructores como mecanismo de
creación de objetos individuales
En los lenguajes basados en objetos, se define el tipo del objeto como interfaz, y
se implementan las operaciones en la declaración misma del objeto.
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Lenguajes basados en objetos
Ejemplo [Abadi-Cardelli] :
ObjectType Cell is
var contents: Integer;
method get(): Integer;
method set(n:Integer);
end;
object unaCelda:Cell is
var contents: Integer := 0;
method get(): Integer is
return self.contents
end;
method set(n: Integer) is
self.contents := n
end;
end;
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Aquí se define
el tipo Cell
Aquí se declara
un objeto
unaCelda de
tipo Cell
Lenguajes basados en objetos
Según [Abadi-Cardelli] el rol del constructor puede cumplirlo una
operación como la siguiente:
procedure newCell(m: Integer): Cell is
object cell: Cell is
var contents: Integer := m;
method get(): Integer is return self.contents end;
method set(n: Integer) is self.contents := n end;
end;
return cell;
end;
…
var cellInstance: Cell := newCell(0);
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Lenguajes basados en objetos
No ahondaremos en las características intrínsecas de este grupo de lenguajes.
Mencionaremos JavaScript y revisaremos algunas de sus características a título
informativo, como ejemplo de lenguaje de esta categoría.
Para mayor información ver
A Theory of Objects
Martín Abadi-Luca Cardelli
Abadi y Cardelli desarrollan en este libro una teoría de objetos, como
fundamento teórico de este paradigma.
Introducen un cálculo basado en objetos, de bastante complejidad
en sus niveles avanzados.
Este cálculo captura la noción de objetos, tipos, subtipos,
especialización de métodos, etc.
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Lenguajes OO
Veremos una introducción y las definiciones básicas de
clases, objetos y herencia en los principales lenguajes que
poseen características de orientación a objetos...
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
C++
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
C++
Entre los lenguajes más populares se encuentra C++.
Incluso varios cursos de OO en otras universidades lo toman como lenguaje ejemplo.
Algunas cosas nos serán familiares puesto que C++ es el antecesor de Java. Incluso
nos parecerá un retroceso en algunos aspectos.
De hecho en sus comienzos, a modo de introducción se decía que
Java = (C++) - C++ fue creado por Bjarne Stroustup en 1979.
Agrega nociones orientadas a objetos al lenguaje C,
conservando los dos estilos de programación.
Esto ha sido elogiado y criticado al mismo tiempo.
Esto permitió la masificación de la OO en la industria,
donde C ya era un lenguaje popular.
Bjarne Stroustup
Es uno de los lenguajes más utilizados en el mundo y ha influenciado a otros
lenguajes, como Java y C# en varios aspectos.
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Clases en C++
Una clase en C++ tiene una declaración y una definición o implementación.
La declaración tiene el siguiente formato:
class Nombre
{
// Cuerpo de la clase
}
El cuerpo contiene cero o más definiciones de miembros (datos o funciones).
Los miembros pueden ser privados, públicos o protegidos.
class Nombre {
private:
// Miembros privados
public:
// Miembros publicos
protected:
// Miembros protegidos
}
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Clases en C++
En la declaración de la clase se incluyen los atributos y el signature o encabezado de
las operaciones.
Puede agregarse implementación, pero sólo de operaciones simples.
En C++ la declaración de la clase y la definición no necesariamente están en un
mismo archivo...
miClase.h
Declaración de
datos y métodos
+
posibles
implementaciones
breves
miClase.cpp
Implementación de
métodos
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Clases en C++
El formato de declaración de operaciones es:
tipo Nombre-clase :: Nombre_función (argumentos)
{
// código
}
Las variables y objetos se declaran anteponiendo el tipo:
float cantidad;
boolean conexionActiva;
CuentaBancaria cbu123AB
Empleado lenny,karl;
La sintaxis de las sentencias de control es prácticamente la misma que en Java! :)
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Clases en C++ : declaración e implementación
class CuentaBanco {
public:
CuentaBanco();
float saldo_cuenta();
float retirar(float);
void depositar(float);
private:
float saldo;
}
Archivo
Cuenta.h
CuentaBanco::CuentaBanco(){
saldo = 0.0;
}
float CuentaBanco::saldo_cuenta(){
return saldo;
}
float CuentaBanco::retirar(float c){
if (c<=saldo) {
saldo = saldo – c;
return c;
} else {
return 0;
}
void CuentaBanco::depositar(float c){
saldo = saldo + c;
}
Archivo
Cuenta.cpp
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Creando objetos
C++ tiene dos operadores new y delete cuyo objetivo es la creación dinámica
de objetos.
Empleado *homero;
homero = new Empleado;
Las llamadas calificadas (la invocación a métodos o atributos del objeto) se realizan
utilizando el símbolo ->
int edad = homero->edad();
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Herencia en C++
En C++ la herencia suele denominarse también derivación de clases.
Sustenta herencia simple y herencia múltiple.
La sintaxis requerida es:
class Padre {
//codigo clase padre
}
class Hija: [public|private|protected] Padre {
//codigo clase hija
}
Los modificadores de acceso en la declaración de la herencia permiten la
redefinición de visibilidades de la clase padre.
En todos los casos, las visibilidades permanecen igual, o se vuelven más restrictivas.
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Herencia en C++
Derivación pública
Acceso clase padre (base)
public
Acceso clase hija (derivada)
public
protected
protected
private
no accesible
Derivación protegida
Acceso clase padre (base)
public
Acceso clase hija (derivada)
protected
protected
protected
private
no accesible
Derivación privada
Acceso clase padre (base)
public
Acceso clase hija (derivada)
private
protected
private
private
no accesible
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Ejemplo herencia – clase Habitacion
class Habitacion {
public:
Habitacion(const int);
~Habitacion();
int size(void);
private:
int metros_cuadrados;
};
Habitacion::Habitacion(const int n)
{
metros_cuadrados = n;
}
Habitacion::size()
{
return metros_cuadrados;
}
...
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Habitacion.h
Habitacion.cpp
Ejemplo herencia – clase Oficina
class Oficina : public Habitacion{
public:
Oficina(const int, const int);
~Oficina();
void listarCapacidad(void);
private:
int capacidad;
};
Oficina.h
Oficina::Oficina(const int size, const int capa)
: Habitacion(size)
{
capacidad = capa;
}
...
Oficina.cpp
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
C#
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Las redes como escenario de ejecución
En los últimos 15 años surge un nuevo escenario de ejecución: las redes de computadoras.
Los sistemas ya no residen en una sola PC, sino “fraccionado” en varias computadoras que en
conjunto conforman el sistema completo.
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Las redes como escenario de ejecución
Han surgido diversas propuestas para desarrollar software en este escenario.
Una es Java.
Multiplataforma.
Máquina virtual.
Orientado a objetos.
Otra propuesta diferente (pero para el mismo escenario) es .NET
Máquina virtual, multiplataforma en potencia.
Varios lenguajes, fáciles de integrar.
Orientado a objetos en general.
Uno de los lenguajes más populares de .NET es C#.
Surge como una alternativa “estilo Java” para
programar en el framework de Microsoft.
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Hola Mundo...
En Java
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
En C#
class HelloWorld {
public static void Main(string[] args) {
System.Console.WriteLine("Hello, World!");
}
}
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
C# y Java
Definición de clases
En Java
class Foo extends Bar implements IFooBar {
//cuerpo de la clase
}
En C#
class Foo : Bar , IFooBar {
//cuerpo de la clase
}
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
C# y Java
Referencia a la clase padre desde la clase hija
En Java
super.hashCode();
En C#
base.HashCode();
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
C# y Java
Importación
En Java
import java.util;
En C#
using System.Net;
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Clase Persona en C# - component
using System;
class Persona {
private string miNombre ="N/A";
private int miEdad = 0;
// Declara una propiedad Nombre de tipo string:
public string Name {
get { return miNombre; }
set { miNombre = value; }
}
// Declara una propiedad Edad de tipo int:
public int Edad {
get { return miEdad; }
set { miEdad = value; }
}
}
Persona p = new Persona();
p.Name = "Juan";
p.Edad = 34;
…
Console.Writeline(p.Edad);
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Java y C#
Algunas similitudes adicionales:
C# conserva el estilo Java de definición de visibilidad de operadores
(por entidades y no por bloques como en C++)
La sintaxis de las sentencias es la misma.
Los dos son compilados a código intermedio.
Los dos proveen un operador que permite averiguar la clase base de un
objeto (Java: instanceof, C#: is).
Los dos poseen casting para polimorfismo.
Ninguno de los dos permite herencia múltiple.
Los dos usan el modificador abstract para las clases y operaciones abstractas.
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
VB.NET
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Historia de VB.NET
Basic
1964
MS Basic
70's
Visual Basic 1.0
1991
Visual Basic 6.0
1998
VB.NET
2000
50 FOR X=99 TO 1 STEP -1
60 PRINT X;"bottle";
70 IF X<>1 THEN PRINT "s";
80 PRINT " of beer on the wall,";X;"bottle";
90 IF X<>1 THEN PRINT "s";
100 PRINT " of beer"
110 PRINT "Take one down and pass it around,"
120 PRINT X-1;"bottle";
...
Sub DisplayResults()
Dim i%
Do
Form1.Cls
If EndNow = True Then Exit Sub
For i = 0 To UBound(Verse)
With Verse(i)
CurrentX = 20
...
Mejor modelo de objetos,
integración con el framework .NET
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
VB.NET – Definición de clase
En VB.NET una clase es una forma de tipo de dato. Define un conjunto de miembros:
campos, propiedades, métodos y eventos.
Public Class Employee
Public EmployeeNumber As Integer
Public FamilyName As String
Public GivenName As String
Public DateOfBirth As Date
Public Salary As Decimal
Public Function Format( ) As String
Return GivenName & " " & FamilyName
End Function
End Class
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Acceso a datos y métodos
Uso de la clase anterior:
Dim emp As New Employee( )
emp.EmployeeNumber = 10
emp.FamilyName = "Grimes"
emp.GivenName = "Frank"
emp.DateOfBirth = #1/28/1965#
emp.Salary = 115000
Console.WriteLine("Employee Name: " & emp.Format( ))
Console.WriteLine("Employee Number: " & emp.EmployeeNumber)
Console.WriteLine("Birth: " & emp.DateOfBirth.ToString("D", Nothing))
Console.WriteLine("Salary: " & emp.Salary.ToString("C", Nothing))
Employee Name: Frank Grimes
Employee Number: 10
Date of Birth: Thursday, January 28, 1965
Salary: $115,000.00
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Herencia
VBasic también permite herencia entre clases:
Public MustInherit Class Shape
Public Origin As Point
Public Size As Extent
Public MustOverride Sub Draw( )
Public Sub Offset(ByVal Amount As Extent)
Origin.X += Amount.XExtent
Origin.Y += Amount.YExtent
End Sub
…
End Class
Public Class Circle Inherits Shape
Public Overrides Sub Draw( )
‘dibujar circulo ! !
End Sub
End Class
Public Class Square Inherits Shape
Public Overrides Sub Draw( )
‘dibujar cuadrado! ! !
End Sub
End Class
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur
Descargar