Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf ·...

38
Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur Tecnología de Programación Diego C. Martínez Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur

Transcript of Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf ·...

Page 1: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Tecnología de Programación

Diego C. Martínez

Departamento de Ciencias e Ingeniería de la ComputaciónUniversidad Nacional del Sur

Page 2: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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.

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.

diseñadoresanalistas programadores testers

Page 3: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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 AmigaEAMOS AMPL ApeScript APL - ISO 8485 AppleScript Apply - A domain-specific language for image processing on parallel or conventional architectures Arc - A Lisp dialect AREXX - 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 CL Clarion Clean Clipper CLIST - Programming language for online applications in the MVS TSO environment CLU CMS-2 COBOL - ISO/IEC 1989 o CobolScript Cobra CODE 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 LustreLYaPAS 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 POV-Ray 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 StringLangSubtext SuperCollider Suneido SYMPL SyncCharts Synergy/DE SystemVerilog T TACL TACPOL TagsMe TADS TIE Transaction Application Language Tcl Transact-SQL tecoTELCOMP 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 WebQLWhitespace Winbatch WinDev Windows PowerShell X++ X10 XBL xbScript - Also xBaseScript xHarbour XL XOTcl XPL XPL0 XQuery XSLT - See XPath Y YACC YAFL Yellow -Rejected prototype for Ada Y Z++ Zonnon ZOPL ZPL ZUG ZZT-oop

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 AmigaEAMOS AMPL ApeScript APL - ISO 8485 AppleScript Apply - A domain-specific language for image processing on parallel or conventional architectures Arc - A Lisp dialect AREXX - 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 CL Clarion Clean Clipper CLIST - Programming language for online applications in the MVS TSO environment CLU CMS-2 COBOL - ISO/IEC 1989 o CobolScript Cobra CODE 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 LustreLYaPAS 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 POV-Ray 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 SmalltalkSNOBOL - 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 StringLangSubtext SuperCollider Suneido SYMPL SyncCharts Synergy/DE SystemVerilog T TACL TACPOL TagsMe TADS TIE Transaction Application Language Tcl Transact-SQL tecoTELCOMP 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 WebQLWhitespace Winbatch WinDev Windows PowerShell X++ X10 XBL xbScript - Also xBaseScript xHarbour XL XOTcl XPL XPL0 XQuery XSLT - See XPath Y YACC YAFL Yellow -Rejected prototype for Ada Y Z++ Zonnon ZOPL ZPL ZUG ZZT-oop

Page 4: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Arbol genealógico de lenguajes de programación

Primer astronauta

Asesinato de JFK

El hombre llega a la luna

Guerra de Vietnam

Se construye el WTC

USSR lanza la MIR

Se inventa el CD

Nace Microsoft Nace Apple

Page 5: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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.

Page 6: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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 comodescripción de los objetos.

Una clase describe la estructura de todos los objetos generados a partir de esa clase.

Ejemplo

Celda

contenido: entero

get(): entero;

set(n:entero);

get() {

return contenido;

}

set() {

contenido=n;

}

Page 7: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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.

Page 8: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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.

Usualmente los objetos suelen manipularse por medio de referencias (semántica por referencia) aunque algunos lenguajes admiten objetos expandidos (semántica por valor).

C++ permite la definición de destructores y Java posee el servicio finalize() en la clase Object.

- Java utiliza únicamente referencias.

- Eiffel permite objetos por valor (subobjetos).

Page 9: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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.

Page 10: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Lenguajes basados en objetos

ObjectType Cell isvar contents: Integer; method get(): Integer; method set(n:Integer);

end;

object unaCelda:Cell isvar contents: Integer := 0; method get(): Integer is

return self.contentsend; method set(n: Integer) is

self.contents := n end;

end;

Ejemplo [Abadi-Cardelli] :

Aquí se declara un objeto

unaCelda de tipo Cell

Aquí se define el tipo Cell

Page 11: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Lenguajes basados en objetos

procedure newCell(m: Integer): Cell isobject 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);

Según [Abadi-Cardelli] el rol del constructor puede cumplirlo una operación como la siguiente:

Page 12: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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 verA Theory of ObjectsMartí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.

Page 13: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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 queposeen características de orientación a objetos...

Page 14: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

C++

Page 15: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

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 otroslenguajes, como Java y C# en varios aspectos.

Algunas cosas nos serán familiares puesto que C++ es el antecesor de Java. Inclusonos parecerá un retroceso en algunos aspectos.

De hecho en sus comienzos, a modo de introducción se decía que

Java = (C++) - -

Entre los lenguajes más populares se encuentra C++. Incluso varios cursos de OO en otras universidades lo toman como lenguaje ejemplo.

Page 16: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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

}

Page 17: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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 miClase.cpp

Declaración dedatos y métodos

+posibles

implementacionesbreves

Implementación de métodos

Page 18: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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

}

La sintaxis de las sentencias de control es prácticamente la misma que en Java! :)

Las variables y objetos se declaran anteponiendo el tipo:float cantidad;

boolean conexionActiva;

CuentaBancaria cbu123AB

Empleado lenny,karl;

Page 19: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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;

}

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;

}

ArchivoCuenta.h

ArchivoCuenta.cpp

Page 20: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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();

Page 21: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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.

Page 22: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Herencia en C++

privatepublic

privateprotected

no accesibleprivate

Acceso clase hija (derivada)Acceso clase padre (base)

Derivación privada

no accesibleprivate

protectedprotected

protectedpublic

Acceso clase hija (derivada)Acceso clase padre (base)

Derivación protegida

no accesibleprivate

protectedprotected

publicpublic

Acceso clase hija (derivada)Acceso clase padre (base)

Derivación pública

Page 23: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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;

}

...

Habitacion.h

Habitacion.cpp

Page 24: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Ejemplo herencia – clase Oficina

class Oficina : public Habitacion{

public:

Oficina(const int, const int);

~Oficina();

void listarCapacidad(void);

private:

int capacidad;

};

Oficina::Oficina(const int size, const int capa)

: Habitacion(size)

{

capacidad = capa;

}

...

Oficina.h

Oficina.cpp

Page 25: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

C#

Page 26: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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.

Page 27: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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 .NETMá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.

Page 28: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Hola Mundo...

class HelloWorld {

public static void main(String[] args) {

System.out.println("Hello, World!");

}

}

class HelloWorld {

public static void Main(string[] args) {

System.Console.WriteLine("Hello, World!");

}

}

En Java

En C#

Page 29: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

C# y Java

Definición de clases

class Foo extends Bar implements IFooBar {

//cuerpo de la clase

}

class Foo : Bar , IFooBar {

//cuerpo de la clase

}

En Java

En C#

Page 30: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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

En C#

super.hashCode();

base.HashCode();

Page 31: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

C# y Java

Importación

En Java

En C#

import java.util;

using System.Net;

Page 32: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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);

Page 33: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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.

Page 34: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

VB.NET

Page 35: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

Departamento de Ciencias e Ingeniería de la Computación - Universidad Nacional del Sur

Historia de VB.NET

Basic1964

MS Basic70's

Visual Basic 1.01991

Visual Basic 6.01998

VB.NET2000

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

Page 36: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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

Page 37: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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

Page 38: Tecnología de Programación - cs.uns.edu.arcs.uns.edu.ar/~dcm/tdp/downloads/Clases/Clase03.pdf · Tecnología de Programación ... Ray PowerBASIC Ppc++ Processing Prograph Progress

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 ClassPublic 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