Apunts de POO a Java: Referències, ACM i Cadenes

Apunts de Programació II sobre referències a Java, aliasing, la llibreria gràfica ACM (GObject, GraphicsProgram) i la manipulació de cadenes amb String.

Programació II · Universitat de Lleida · Grau en Enginyeria Informàtica · 1r curs

14 pàgines · 3 temes · 6 flashcards · 12 preguntes tipus test

Índex

  1. Objectes, referències i gestió de memòria · p. 3-5
  2. Programació gràfica amb la llibreria ACM · p. 5-8
  3. Tractament de cadenes: String i StringTokenizer · p. 8-13

Objectes, referències i gestió de memòria

Flashcards

En quina circumstància dues variables rect1 i rect2 faran que rect1 == rect2 retorni true?
Únicament quan totes dues variables apuntin exactament a la mateixa instància d'objecte a la memòria.
Després de fer 'GRect[] v = new GRect[5];', quants objectes de tipus GRect s'han creat a la memòria?
Cap; només s'ha creat la taula amb 5 cel·les que contenen null.

Preguntes tipus test

  1. Què emmagatzema exactament una variable de tipus GRect a Java?
    • a) Una còpia clonada immutable
    • b) Totes les coordenades i píxels directament
    • c) La referència de memòria a l'objecte
    • d) Un valor numèric primitiu

    Resposta: c) La referència de memòria a l'objecte. Les variables d'objecte a Java només contenen referències o punters cap a les instàncies.

  2. Què passa en fer l'assignació 'rect2 = rect;'?
    • a) Es duplica l'objecte a la memòria
    • b) Ambdós apunten al mateix objecte existent
    • c) S'esborra el contingut de la variable rect
    • d) Es comparen els continguts dels rectangles

    Resposta: b) Ambdós apunten al mateix objecte existent. Es copia el valor de la referència, generant una situació d'aliasing cap al mateix objecte.

  3. Quin valor contenen inicialment les posicions d'un array d'objectes acabat de declarar?
    • a) Zero
    • b) Una excepció
    • c) Una instància per defecte
    • d) null

    Resposta: d) null. Crear l'array no instancia els elements; cada cel·la queda inicialitzada a null.

Programació gràfica amb la llibreria ACM

Flashcards

Què retorna la crida getElementAt(x, y) si no hi ha cap figura en aquelles coordenades?
Retorna el valor null.
On se situa l'origen de coordenades d'un GLabel respecte al text?
A la part inferior de la primera línia a l'esquerra.

Preguntes tipus test

  1. Què fa el mètode move(dx, dy)?
    • a) Canvia l'amplada i alçada de la figura
    • b) Elimina l'objecte de la posició i el reinicia
    • c) Situa l'objecte a les coordenades dx i dy absolutes
    • d) Desplaça sumant dx i dy a la posició actual

    Resposta: d) Desplaça sumant dx i dy a la posició actual. El mètode move aplica un increment relatiu a les coordenades actuals de la instància.

  2. Quin tipus de dada empren les coordenades dels constructors gràfics a ACM?
    • a) double
    • b) long
    • c) float
    • d) int

    Resposta: a) double. Els constructors de figures com GRect, GOval o GLine reben valors numèrics en format double.

  3. Quina funció té waitForClick() a GraphicsProgram?
    • a) Finalitza l'aplicació gràfica completament
    • b) Esborra immediatament l'últim element clicat
    • c) Atura el programa fins que es clica al llenç
    • d) Pausa l'execució un nombre concret de segons

    Resposta: c) Atura el programa fins que es clica al llenç. waitForClick() suspèn l'execució fins que es detecta una pulsació del ratolí sobre la finestra.

Tractament de cadenes: String i StringTokenizer

Flashcards

Què passa si apliquem el mètode toUpperCase() sobre una variable s sense fer 's = s.toUpperCase();'?
La variable s manté exactament el seu valor original, ja que la cadena és immutable i el resultat no s'ha guardat.
Quin valor retorna el mètode indexOf quan el caràcter buscat no és present a la cadena?
Retorna el valor numèric -1.

Preguntes tipus test

  1. Per què cal fer 's = s.trim()' per eliminar espais?
    • a) Perquè trim() esborra la variable s de memòria
    • b) Perquè els String són immutables i es crea un de nou
    • c) Perquè és obligatori assignar-ho a un tipus boolean
    • d) Perquè trim() només funciona dins de bucles

    Resposta: b) Perquè els String són immutables i es crea un de nou. Les cadenes no es poden alterar internament; cal recollir la nova instància retornada per reassignació.

  2. Què retorna el mètode compareTo(s2) si les dues cadenes són exactament iguals?
    • a) -1
    • b) 0
    • c) 1
    • d) true

    Resposta: b) 0. compareTo retorna un valor enter igual a 0 quan ambdues cadenes tenen el mateix contingut.

  3. Quin és el separador per defecte si s'empra 'new StringTokenizer(str)'?
    • a) El salt de línia exclusivament
    • b) Els espais en blanc
    • c) La coma
    • d) El punt i coma

    Resposta: b) Els espais en blanc. Si no s'especifica cap patró de delimitadors, StringTokenizer separa pels espais en blanc.

I 0 flashcards i 3 preguntes més al document.

Text del document

APUNTS PROGRAMACIÓ II Grau en Enginyeria Informàtica Universitat de Lleida AprenAI 2026-2027 Apunts de Programació II sobre referències a Java, aliasing, la llibreria gràfica ACM (GObject, GraphicsProgram) i la manipulació de cadenes amb String.

APREN.AI Índex 1 Objectes, referències i gestió de memòria Naturalesa de les referències a Java Taules de referències Nivells d'accés a les classes 2 Programació gràfica amb la llibreria ACM El llenç de GraphicsProgram i els elements gràfics Operacions sobre figures individuals Mètodes de control del GraphicsProgram 3 Tractament de cadenes: String i StringTokenizer Immutabilitat i manipulació de String Mètodes de cerca, extracció i comparació Fragmentació de textos amb StringTokenizer 4 Resum per repassar Objectes, referències i memòria Gràfics amb la llibreria ACM Tractament de cadenes: String i StringTokenizer Solucions de les preguntes de repàs Aquests apunts poden contenir errors o omissions.

Són un material de suport i no substitueixen el temari oficial ni el professorat: contrasta la informació important. Apunts de POO a Java: Referències, ACM i Cadenes 1 1 Objectes, referències i gestió de memòria EN ACABAR SABRÀS Distingir entre la referència a un objecte i la instància en memòria. Diferenciar la comparació per identitat (==) de la comparació per contingut (.equals()). Gestionar correctament la inicialització d'arrays d'elements de referència. PENSA-HI ABANS DE LLEGIR 1 Si assignem una variable d'objecte a una altra i modifiquem un atribut des de la segona, s'altera també la primera?

Naturalesa de les referències a Java A Java, les variables de tipus no primitiu mai emmagatzemen directament les dades d'un objecte. En realitat, contenen una referència a l'objecte, és a dir, l'adreça de memòria on es troba allotjat. Si una variable de referència no s'ha enllaçat a cap instància concreta mitjançant la paraula clau new , el seu contingut pren per defecte el valor null . DEFINICIÓ L'aliasing té lloc quan dues o més variables contenen la referència cap a una única instància física a la memòria. Qualsevol canvi d'estat aplicat des d'una variable serà visible des de totes les altres.

Quan s'assigna una referència a una altra (per exemple, rect2 = rect1; ), no s'està duplicant l'objecte sinó copiant el punter. Aquest comportament condiciona directament el funcionament de les operacions d'igualtat: Mecanisme Què avalua realment Resultat quan apunten a diferents instàncies amb mateix contingut == Identitat: compara si les dues referències tenen la mateixa adreça false equals(...) Equivalència: compara els valors i continguts interiors true ERROR FREQÜENT Confondre l'operador == amb el mètode equals() . Avaluar dos objectes independents amb == retorna fals encara que tots els seus camps tinguin exactament el mateix valor, ja que ocupen espais diferents de memòria.

Apunts de POO a Java: Referències, ACM i Cadenes 2 Taules de referències En declarar i dimensionar un vector d'objectes com ara GRect[] rectangles = new GRect[10]; , no es construeixen deu instàncies gràfiques. Únicament es reserva un bloc de deu cel·les capaces de contenir cadascuna una referència buida inicialitzada a null. Per emplenar cada posició, cal fer una iteració bucle per bucle instanciant cada element amb la sentència new . COMPROVA-HO 2 Què passa si intentem executar un mètode sobre una posició d'un vector d'objectes recent creat sense haver fet un 'new' previ a aquesta cel·la?

Nivells d'accés a les classes La visibilitat dels membres d'un tipus de dades determina com s'interactua amb ells des de l'exterior: public: components que resulten accessibles i utilitzables des de fora de la classe. private: elements restringits a l'àmbit intern, inaccessibles directament des de l'exterior. ESQUEMA Nivells d'accés a Java IDEES CLAU A Java les variables d'objectes emmagatzemen adreces o referències, no pas les instàncies directes. L'aliasing succeeix quan dues o més referències assenyalen al mateix objecte físic. L'operador == comprova la identitat de memòria mentre que equals avalua la igualtat de contingut.

Un array d'objectes només reserva espai per a referències nul·les fins que s'instancia cada cel·la individualment. COMPROVA EL QUE HAS APRÈS 3. En quina circumstància dues variables rect1 i rect2 faran que rect1 == rect2 retorni true? 4. Després de fer 'GRect[] v = new GRect[5];', quants objectes de tipus GRect s'han creat a la memòria? public Visible i accessible des de fora de la classe private Restringit a l'àmbit interior de la pròpia classe Apunts de POO a Java: Referències, ACM i Cadenes 3 Test Encercla la resposta correcta. Les solucions són al final. 5. Què emmagatzema exactament una variable de tipus GRect a Java? 6. Què passa en fer l'assignació 'rect2 = rect;'? 7.

Quin valor contenen inicialment les posicions d'un array d'objectes acabat de declarar? 8. Com s'ha de comprovar si dos objectes independents tenen els mateixos valors interns? 2 Programació gràfica amb la llibreria ACM EN ACABAR SABRÀS Instanciar figures geomètriques i textos emprant les classes d'ACM. Modificar l'aspecte i coordenades dels objectes gràfics en pantalla. Gestionar la superposició, eliminació i pauses d'execució dins del programa gràfic. PENSA-HI ABANS DE LLEGIR 9 Com podem evitar que diverses figures afegides a un GraphicsProgram apareguin amuntegades una sobre l'altra?

El llenç de GraphicsProgram i els elements gràfics La finestra de dibuix actua com un llenç d'elements gràfics. Si no s'especifica i s'organitza la ubicació precisa de cada figura en afegir-la, totes s'amunteguen al mateix punt.

La biblioteca ACM disposa de diversos tipus gràfics bàsics: Una còpia clonada immutable a) Totes les coordenades i píxels directament b) La referència de memòria a l'objecte c) Un valor numèric primitiu d) Es duplica l'objecte a la memòria a) Ambdós apunten al mateix objecte existent b) S'esborra el contingut de la variable rect c) Es comparen els continguts dels rectangles d) Zero a) Una excepció b) Una instància per defecte c) null d) Amb el mètode equals() a) Fent servir l'operador != b) Utilitzant una assignació directa c) Mitjançant l'operador == d) Apunts de POO a Java: Referències, ACM i Cadenes 4 new GRect(x, y, width, height) : defineix un rectangle segons posició d'origen i mides.

new GOval(x, y, width, height) : circumscriu un oval dins del rectangle delimitador equivalent. new GLine(x1, y1, x2, y2) : traça una línia recta entre el punt inicial i el punt final. new GLabel(String s, double x, double y) : mostra un text; la posició se situa a la part inferior de la primera línia a l'esquerra. Tots els paràmetres geomètrics i dimensionals d'aquests constructors empren el tipus primitiu double .

Operacions sobre figures individuals Els objectes de tipus GObject permeten consultar i alterar el seu estat visual mitjançant diferents mètodes: Mètode Comportament setColor(Color c) Canvia el color del traç o del component setLocation(double x, double y) Reassigna la posició als eixos de coordenades move(double dx, double dy) Desplaça la figura sumant els increments dx i dy getHeight() i getWidth() Retornen respectivament l'alçada i l'amplada (double) setFilled(boolean fill) Activa o desactiva l'emplenat (GRect i GOval) setFillColor(Color c) Estableix el color de fons interior (GRect i GOval) setFont(String font) Modifica la tipografia de l'etiqueta (GLabel) COMPROVA-HO 10 Quina diferència hi ha entre setLocation(x, y) i move(dx, dy)?

Mètodes de control del GraphicsProgram La classe principal disposa de mètodes dedicats a la gestió de la finestra i al control temporal: Afegir elements: add(gobj) afegeix l'objecte en les seves coordenades internes, o bé add(gobj, x, y) situant-lo a la posició indicada. 1 Eliminació: remove(gobj) suprimeix un element en concret i removeAll() buida el llenç completament. 2 Cerca: getElementAt(x, y) retorna l'objecte situat més al capdamunt en aquelles coordenades, o null si no n'hi ha cap. 3 Animacions i esdeveniments: pause(double millis) atura temporalment l'execució del fil, mentre que waitForClick() manté la pausa fins que l'usuari fa un clic sobre el llenç.

4 Apunts de POO a Java: Referències, ACM i Cadenes 5 PER RECORDAR-HO getElementAt(x, y) tria la figura que està a la capa superior si n'hi ha diverses superposades, i retorna null si es prem en un espai buit. PROCÉS Cicle de visualització d'una figura a ACM 1 Instanciació Creació de l'objecte gràfic amb paràmetres double 2 Personalització Configuració de color, farciment o tipografia 3 add al llenç Incorporació a GraphicsProgram per ser visible IDEES CLAU GraphicsProgram funciona com un llenç on cal posicionar explícitament els objectes gràfics. Les coordenades d'un GLabel s'ancoren a l'extrem inferior esquerre de la línia base del text.

GRect i GOval disposen de propietats específiques com setFilled() i setFillColor(). pause() i waitForClick() permeten controlar el flux d'animacions i la interacció de l'usuari. COMPROVA EL QUE HAS APRÈS 11. Què retorna la crida getElementAt(x, y) si no hi ha cap figura en aquelles coordenades? 12. On se situa l'origen de coordenades d'un GLabel respecte al text? Test Encercla la resposta correcta. Les solucions són al final. 13. Què fa el mètode move(dx, dy)? 14. Quin tipus de dada empren les coordenades dels constructors gràfics a ACM?

Canvia l'amplada i alçada de la figura a) Elimina l'objecte de la posició i el reinicia b) Situa l'objecte a les coordenades dx i dy absolutes c) Desplaça sumant dx i dy a la posició actual d) double a) long b) float c) int d) Apunts de POO a Java: Referències, ACM i Cadenes 6 15. Quina funció té waitForClick() a GraphicsProgram? 16. Com s'eliminen alhora totes les figures del llenç? 3 Tractament de cadenes: String i StringTokenizer EN ACABAR SABRÀS Entendre l'impacte de la immutabilitat en l'ús de mètodes de la classe String. Emprar els mètodes estàndard de cerca, extracció i comparació de cadenes. Processar textos seqüencialment mitjançant la classe StringTokenizer.

PENSA-HI ABANS DE LLEGIR 17 Per què no podem comparar l'ordre lexicogràfic de dos textos amb els operadors > o < a Java? Immutabilitat i manipulació de String A Java, els objectes de la classe String són immutables: el seu contingut no es pot modificar un cop creats. Operacions com trim() , toUpperCase() o la concatenació generen una instància nova. Per reflectir el canvi, cal reassignar el resultat a la variable (per exemple, line = line.trim(); ).

EXEMPLE Formes equivalents de concatenar textos: str = str.concat("!"); str = str + "!"; str += "!"; Mètodes de cerca, extracció i comparació La classe String ofereix funcions per analitzar i operar sobre el text: Mètode Funció length() Retorna el nombre total de caràcters Finalitza l'aplicació gràfica completament a) Esborra immediatament l'últim element clicat b) Atura el programa fins que es clica al llenç c) Pausa l'execució un nombre concret de segons d) Amb removeAll() a) Amb delete() b) Amb clear() c) Amb remove(null) d) Apunts de POO a Java: Referències, ACM i Cadenes 7 Mètode Funció charAt(int index) Retorna el caràcter situat a la posició indicada substring(int p1, int p2) Extreu la subcadena des de p1 fins a p2; si s'omet p2, arriba fins al final indexOf(char c, int start) / indexOf(String s, int start) Retorna la posició de la primera ocurrència; si no existeix, retorna -1 startsWith(prefix) / endsWith(suffix) Retorna cert si la cadena comença o acaba pel text indicat equals(s2) / equalsIgnoreCase(s2) Compara igualtat exacta o ignorant majúscules i minúscules compareTo(String s2) Retorna > 0 si la receptora és major, 0 si són iguals, i < 0 si és menor ERROR FREQÜENT Utilitzar operadors relacionals ( == , != , > , < ) per avaluar cadenes.

És un error greu: cal usar sempre equals() per a igualtat de text o compareTo() per a l'ordre lexicogràfic. COMPROVA-HO 18 Què retorna compareTo(s2) quan la cadena receptora és menor en ordre lexicogràfic que s2? Fragmentació de textos amb StringTokenizer La classe StringTokenizer (del paquet java.util ) s'utilitza per descompondre una cadena en fragments anomenats tokens: new StringTokenizer(str) : divideix la cadena prenent els espais en blanc per defecte com a separadors. new StringTokenizer(str, delims) : divideix la cadena utilitzant els caràcters del paràmetre delims com a divisors. hasMoreTokens() : retorna true si encara queden fragments per extreure.

nextToken() : obté el següent fragment de text disponible. PROCÉS Recorregut de tokens amb StringTokenizer 1 Inicialització new StringTokenizer amb text i delimitadors 2 Comprovació Avaluació de la condició hasMoreTokens() 3 Extracció Cridar nextToken() per processar el fragment Apunts de POO a Java: Referències, ACM i Cadenes 8 IDEES CLAU Els objectes String són completament immutables; qualsevol modificació produeix una instància nova. indexOf() retorna la posició del caràcter o subcadena cercats, o bé -1 si no s'hi troben. La comparació alfabètica de cadenes es realitza mitjançant compareTo(), mai amb operadors relacionals.

StringTokenizer permet iterar sobre els trossos d'una cadena mitjançant hasMoreTokens() i nextToken(). COMPROVA EL QUE HAS APRÈS 19. Què passa si apliquem el mètode toUpperCase() sobre una variable s sense fer 's = s.toUpperCase();'? 20. Quin valor retorna el mètode indexOf quan el caràcter buscat no és present a la cadena? Test Encercla la resposta correcta. Les solucions són al final. 21. Per què cal fer 's = s.trim()' per eliminar espais? 22. Què retorna el mètode compareTo(s2) si les dues cadenes són exactament iguals? 23. Quin és el separador per defecte si s'empra 'new StringTokenizer(str)'? 24. Quin mètode comprova si queden elements pendents de llegir en un StringTokenizer?

Perquè trim() esborra la variable s de memòria a) Perquè els String són immutables i es crea un de nou b) Perquè és obligatori assignar-ho a un tipus boolean c) Perquè trim() només funciona dins de bucles d) -1 a) 0 b) 1 c) true d) El salt de línia exclusivament a) Els espais en blanc b) La coma c) El punt i coma d) nextToken() != null a) hasNext() b) moreElements() c) hasMoreTokens() d) Apunts de POO a Java: Referències, ACM i Cadenes 9 4 Resum per repassar Objectes, referències i memòria Concepte Definició i ús Referència Adreça de memòria cap a un objecte; pren el valor null si no s'ha instanciat. Aliasing Situació en què dues o més variables apunten a la mateixa instància a la memòria.

Operador == Avalua la identitat de memòria (comprova si les referències assenyalen la mateixa adreça). Mètode equals() Comprova l'equivalència de valor o contingut intern entre dos objectes. Vector de referències Reserva espai per a referències nul·les; cal iterar per instanciar cada posició amb new . public / private Nivells d'accés que defineixen si un membre és accessible des de fora de la classe o només des de l'interior. Gràfics amb la llibreria ACM Element / Mètode Funció principal GraphicsProgram Finestra que fa de llenç per col·locar figures geomètriques i components visuals. GRect , GOval , GLine Figures geomètriques definides amb coordenades i dimensions de tipus double .

GLabel Text gràfic ancorat a la part inferior esquerra de la primera línia. setLocation() / move() Assigna coordenades absolutes o desplaça de forma relativa sumant increments. add() / remove() / removeAll() Afegeix elements al llenç, en treu un de determinat o buida tota la finestra. getElementAt(x, y) Retorna la figura més visible a unes coordenades, o null si la posició és buida. pause() / waitForClick() Suspèn l'execució durant uns mil·lisegons o fins que es fa un clic sobre el llenç.

Apunts de POO a Java: Referències, ACM i Cadenes 10 Tractament de cadenes: String i StringTokenizer Element / Mètode Funció principal Immutabilitat de String Els textos no canvien mai de valor intern; cal reassignar el resultat d'operacions com trim() . substring(p1, p2) Extreu la porció de text entre p1 i p2 , o fins al final si no s'indica p2 . indexOf() Retorna l'índex de la primera aparició d'un caràcter o text, o -1 si no existeix. compareTo() Avalua ordre lexicogràfic: retorna 0 si són iguals, > 0 si és major i < 0 si és menor. StringTokenizer Classe de java.util per separar un text en trossos emprant hasMoreTokens() i nextToken() .

Apunts de POO a Java: Referències, ACM i Cadenes 11 Solucions de les preguntes de repàs 1. Sí, perquè totes dues variables comparteixen la mateixa referència i apunten al mateix objecte físic. 2. La posició conté el valor null, per la qual cosa s'aturarà el programa llançant un error d'execució en intentar desreferenciar un punter inexistent. 3. Únicament quan totes dues variables apuntin exactament a la mateixa instància d'objecte a la memòria. 4. Cap; només s'ha creat la taula amb 5 cel·les que contenen null. 5. c) La referència de memòria a l'objecte. Les variables d'objecte a Java només contenen referències o punters cap a les instàncies. 6. b) Ambdós apunten al mateix objecte existent.

Es copia el valor de la referència, generant una situació d'aliasing cap al mateix objecte. 7. d) null. Crear l'array no instancia els elements; cada cel·la queda inicialitzada a null. 8. a) Amb el mètode equals(). L'operador == només compara adreces de memòria; equals avalua l'equivalència de contingut. 9. Cal definir explícitament coordenades individuals en crear-les o passar-les al mètode add(obj, x, y). 10. setLocation situa l'objecte directament a unes coordenades absolutes, mentre que move suma un desplaçament relatiu a la posició que ja té. 11. Retorna el valor null. 12. A la part inferior de la primera línia a l'esquerra. 13. d) Desplaça sumant dx i dy a la posició actual.

El mètode move aplica un increment relatiu a les coordenades actuals de la instància. 14. a) double. Els constructors de figures com GRect, GOval o GLine reben valors numèrics en format double. 15. c) Atura el programa fins que es clica al llenç. waitForClick() suspèn l'execució fins que es detecta una pulsació del ratolí sobre la finestra. 16. a) Amb removeAll(). El mètode de classe GraphicsProgram per treure tots els elements presents és removeAll(). 17. A Java aquests operadors només s'apliquen a tipus primitius, mentre que les cadenes són objectes i requereixen el mètode compareTo(). 18. Retorna un nombre enter negatiu (menor que zero). 19.

La variable s manté exactament el seu valor original, ja que la cadena és immutable i el resultat no s'ha guardat. 20. Retorna el valor numèric -1. 21. b) Perquè els String són immutables i es crea un de nou. Les cadenes no es poden alterar internament; cal recollir la nova instància retornada per reassignació. 22. b) 0. compareTo retorna un valor enter igual a 0 quan ambdues cadenes tenen el mateix contingut. 23. b) Els espais en blanc. Si no s'especifica cap patró de delimitadors, StringTokenizer separa pels espais en blanc. Apunts de POO a Java: Referències, ACM i Cadenes 12 24. d) hasMoreTokens(). La classe StringTokenizer utilitza hasMoreTokens() per saber si resten trossos per llegir.

Apunts de POO a Java: Referències, ACM i Cadenes 13

Més apunts de Programació II

Exàmens, temes i apunts de Programació II