







Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Programacion orientada a objetos
Tipo: Apuntes
1 / 13
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!








1.1. Características principales
Page 2
(persona-nombre p1) -> "Rafa" (persona-fecha-nacimiento p1) -> "1988-03-25" (set-persona-fecha-nacimiento! p1 "1988-04-25")
(define (edad persona fecha-actual) (let ((año-nacimiento (string->number (substring (persona-fecha-nacimiento persona) 0 4))) (año-actual (string->number (substring fecha-actual 0 4)))) (- año-actual año-nacimiento)))
(edad p1 "2006-05-23")
(require (lib "date.ss")) (date-display-format 'iso-8601) (define fecha-actual (date->string (seconds->date (current-seconds))))
(edad (persona-fecha-nacimiento p1) fecha-actual)
(require (lib "class.ss"))
Page 4
(define persona% (class object% (init-field nombre nif) (field (apellidos null) (fecha-nacimiento null))
(define/public (di-hola) (printf "Hola, soy ~a~%" nombre))
(super-new)))
(define p1 (new persona% (nif '212121232) (nombre "Pepito")))
(send p1 di-hola)
(define persona% (class object% (init-field nombre nif) (field (apellidos null) (fecha-nacimiento null))
(define/public (set-apellidos nuevos-apellidos) (set! apellidos nuevos-apellidos))
(define/public (set-fecha-nacimento fecha) (set! fecha-nacimiento fecha))
(define/public (get-nombre-completo) (if (not (null? apellidos)) (string-append nombre " " apellidos) nombre))
(define/public (di-hola) (define nombre-completo (send this get-nombre-completo)) (printf "hola, soy ~a~%" nombre-completo))
(define/public (get-edad fecha-actual) (let ((año-nacimiento (string->number (substring fecha-nacimiento 0 4))) (año-actual (string->number (substring fecha-actual 0 4)))) (- año-actual año-nacimiento)))
(super-new)))
(define p1 (new persona% (nombre "Rafa") (nif '23434222N)))
Page 5
(define persona% (class object% (init-field nombre) (field (amigos '()))
(define/public (di-hola) (printf "hola, me llamo ~a~%" nombre))
(define/public (get-nombre) nombre)
(define/public (es-amigo? otro) (if (memq otro amigos) ;memq comprueba si otro está en amigos usando la igualdad eq? #t #f))
(define/public (añade-amigo otro) (if (not (es-amigo? otro)) ; tambien es posible llamar a los métodos directamente (begin (set! amigos (cons otro amigos)) (send otro añade-amigo this))))
(define/public (saludan-amigos) (for-each (lambda (f) (send f di-hola)) amigos))
(super-new)))
(define frodo (new persona% (nombre "Frodo"))) (define gandalf (new persona% (nombre "Gandalf"))) (send frodo añade-amigo gandalf) (send frodo saludan-amigos) (send gandalf saludan-amigos)
(define mago% (class persona% (init-field nombre-pila nivel-conjuro) (field (energia 100) (vida #t)) (inherit-field nombre)
(define/public (get-nivel-conjuro) nivel-conjuro)
(define/public (get-energia)
Page 7
energia)
(define/public (rayo) (set! energia (- energia 10)) (if (< 0 energia) (set! vida #f)))
(define/public (lanza-conjuro otro-mago) (define otro-nombre (send otro-mago get-nombre)) (define nivel-otro (send otro-mago get-nivel-conjuro)) (printf "Yo, ~a, lanzo un conjuro a ~a~%" nombre otro-nombre) (if (< nivel-otro nivel-conjuro) (begin (send otro-mago rayo) (printf "Mi conjuro te ha alcanzado, ~a~%" otro-nombre)) (printf "~a, admito que eres más poderoso que yo" otro-nombre)))
(super-new (nombre (string-append "Mago " nombre-pila))))) (define gandalf (new mago% (nombre-pila "Gandalf") (nivel-conjuro 100))) (define saruman (new mago% (nombre-pila "Saruman") (nivel-conjuro 90))) (send gandalf lanza-conjuro saruman) (send saruman lanza-conjuro gandalf)
(define enano% (class persona% (inherit-field nombre)
(define/override (di-hola) (printf "Mmmm.. soy ~a y estoy hambriento!~%" nombre))
(super-new)))
(define gimli (new enano% (nombre "Gimli"))) (send frodo añade-amigo gimli) (send frodo saludan-amigos)
Page 8
(define i-extended-stack% (interface (i-stack%) size))
(define extended-stack% (class* safe-stack% (i-extended-stack%) (inherit-field stack)
(define/public (size) (length stack))
(super-new)))
(get-field name s1) (get-field stack s1)
(class-field-accessor clase campo) -> devuelve un selector (class-field-mutator clase campo) -> devuelve un mutador
(define name-mutator (class-field-mutator stack% name)) (define name-selector (class-field-accessor stack% name)) (name-mutator s1 'pepito) (name-selector s1) (get-field name s1) (send s1 print-name)
(object? v) (class? v) (interface? v) (class->interface class) (object-interface object) (is-a? v interface) (is-a? v class) (subclass? v class) (implementation? v interface) (interface-extension? v interface) (interface->method-names interface) (field-names object)
Page 10
(define pi 3.14159) (define (square x) (* x x))
(define circulo% (class object% (init-field (radio 0)) (define/public (area) (* pi (square radio))) (super-new)))
(define circ1 (new circulo% (radio 10))) (send circ1 area)
(define total 0) (define contador% (class object% (init-field (c 0)) (define/public (inc) (set! c (+ 1 c)) (set! total (+ 1 total)) c) (define/public (get-total) total) (super-new)))
(define c1 (new contador%)) (define c2 (new contador%)) (define c3 (new contador%)) (send c1 inc) (send c1 inc)
Page 11
Page 13