Interfazeen Garapena

Interfazen historia

1 Sarrera

Interfaze bat (pluralean: interfazeak) informatikan erabiltzen da bi sistema, programa, gailu edo edozein motatako osagaien arteko konexio funtzionalari izena emateko, maila desberdinetako komunikazioa ahalbidetzen duena, informazioa trukatzeko aukera emanez.

Adibideak:

  • Erabiltzaile-interfazeak: programa bat erabiltzerakoan.

  • Giza interfaze gailua: ingelesezko sigletan HID (human interface device), hardware interfaze bati egiten dio erreferentzia, gizakiok ordenagailuarekin elkarreragiteko erabiltzen duguna.

  • Interfaze fisikoa: osagai bat beste batera konektatzen denean (USB ataka edo SATA ataka).

2 Erabiltzaile-interfazeen bilakaera

Erabiltzaile-interfazea, EI (ingelesez User Interface, UI), erabiltzaile baten eta makina baten arteko komunikazioa ahalbidetzen duen bitartekoa da. Normalean ulertzeko eta erabiltzeko errazak izaten dira, nahiz eta informatikan hobea den “erabilgarriak, atseginak eta intuitiboak” direla esatea.

Gaur egun 3 mota bereiz ditzakegu:

  • Komando-lerroko interfazea (Command-Line Interface, CLI): Interfaze alfanumerikoak (komando-interpretea) testua edo karaktere bereziekin sortutako interfaze sinpleak soilik erakusten dituztenak.

  • Erabiltzaile-interfaze grafikoa (Graphic User Interface, GUI): Ordenagailuarekin modu azkar eta intuitiboan komunikatzeko aukera ematen dute, kontrol- eta neurketa-elementuak grafikoki irudikatuz.

  • Erabiltzaile-interfaze naturala (Natural User Interface, NUI): Ukigarriak izan daitezke, pantaila ukigarri batean “kontrol panela” grafikoki irudikatuz eta hatzarekin elkarreragiteko aukera emanez; ahots-ezagutza bidez funtziona dezakete (adibidez Siri); edo gorputz-mugimenduen bidez (antzinako Kinect edo egungo Vision Pro bezalako Apple-ren gailuak).

Wikipedian interfaze grafikoen historia dago, eta hemen laburpen bat egingo da.

2.1 Komando-lerroko interfazea

Komando-lerroko interfazea edo komando-lerroko aginte-interfazea (ingelesez: command-line interface, CLI) ordenagailu baten erabiltzaile-interfaze mota bat da, erabiltzaileei programa informatiko bati edo sistema eragileari aginduak emateko aukera ematen diona testu-lerro sinple baten bidez.

CLIak modu interaktiboan erabil daitezke, testu-sarrera motaren batean aginduak idatziz, edo askoz modu automatizatuagoan (batch fitxategia), script-fitxategi batetik aginduak irakurriz.

Interfaze hau ia konputazioaren hasieratik existitzen da, antzinatasunean soilik txartel zulatuak eta antzeko mekanismoek gaindituta. Ordenagailuek “terminal tontoak” konektatuta zituzten, eta horien bidez aginduak bidaltzen zitzaizkien ordenagailuari.

Terminal VT100. Iturria: Wikipedia

Gaur egun, komando-lerroa “terminal emulatzaile” izeneko programekin erabiltzen da, eta horiek komando-interprete bat (shell izenekoa) exekutatzen dute. Interprete hauek, sistema eragilearen arabera, aukera desberdinak izan ditzakete, adibidez:

  • Windows-en cmd zaharra edo berriagoa eta hobetua den PowerShell erabil daitezke. Beste batzuk ere erabil daitezke, baina ez daude lehenetsita instalatuta (adibidez bash).

  • GNU/Linux sistemetan gehien erabiltzen den interpretea eta banaketa gehienetan instalatuta dagoena bash da. Azken urteetan zsh-k merkatu asko irabazi du Oh-my-zsh frameworkari esker.

  • MacOS sistemetan interprete lehenetsia zsh da.

BASH interfazea. Iturria: Wikipedia

CLI, shell eta terminal emulatzaile kontzeptuak ez dira gauza bera. CLI paradigma bati egiten dio erreferentzia, eta shell edo terminal emulatzaileak programa informatiko espezifikoak dira, normalean elkarrekin CLIa inplementatzen dutenak. Hala ere, hirurak sinonimo gisa erabiltzen dira askotan.

2.2 Erabiltzaile-interfaze grafikoa

Erabiltzaile-interfaze grafikoa, GUI izenez ere ezaguna (ingelesez graphical user interface), erabiltzaile-interfaze gisa jarduten duen programa informatiko bat da, gaur egun irudi eta objektu grafiko multzo bat erabiliz interfazean eskuragarri dauden informazioa eta ekintzak irudikatzeko.

Bere funtzio nagusia ingurune bisual erraza eskaintzea da, ordenagailu baten sistema eragilearekin komunikazioa ahalbidetzeko.

2.2.1 Testu moduko interfazea

Interfaze grafikoak ez dira mahaigaineko inguruneekin jaio, baizik eta aurreko urratsetan ere badaude leihoak edo inguruneak simulatzen dituzten liburutegiak, testu-karaktereak eta koloreak erabiliz.

FreeDos Edit. Iturria: Wikipedia
Midnight Commander. Iturria: Wikipedia

Kontuan izan behar da interfaze hauek baliabide oso gutxiko makinetan eta interfaze grafikorik ez zuten sistema eragileetan erabiltzen zirela normalean.

2.2.2 Lehen ikerketak eta garapenak

Doug Engelbartek Stanford Research Institute-n (Menlo Park, AEB) 60ko hamarkadan egindako “Giza Adimenaren Handitzea” proiektuak oN-Line System garatu zuen, saguarekin kontrolatutako kurtsorea eta hipertextuarekin lan egiteko hainbat leiho zituen sistema.

Hasierako ikerketa asko ume txikiek nola ikasten duten aztertzean oinarritu zen. Horregatik, diseinua eskuko eta begiaren arteko koordinazioaren oinarrizko mugimenduetan oinarritu zen, komando-hizkuntzak erabili ordez.

Sagu baten lehen prototipoa. Iturria: Wikipedia

GUIa hasieran Xerox PARCen (Palo Alto Research Center) garatu zuten Alan Kay, Larry Tesler, Dan Ingalls eta beste ikertzaile batzuek. Leihoak, ikonoak eta menuak erabiltzen zituen, lehen menu desplegable finkoa barne, fitxategiak ireki, ezabatu eta mugitzeko aginduak onartzeko.

1981ean Xeroxek produktu berritzaile bat aurkeztu zuen, Star izenekoa, PARCen berrikuntza asko txertatuz. Ez zen arrakasta komertziala izan, baina Star-ek etorkizuneko garapenetan eragin handia izan zuen, adibidez Apple, Microsoft eta Sun Microsystems-en.

1979an, Steve Wozniak, Steve Jobs eta Jef Raskin buru zituen taldeak (Xeroxeko langile ohiekin batera) Xerox PARCen ikusitako ideiekin jarraitu zuten eta 1983an “Apple Lisa” ordenagailua merkaturatu zuten, interfaze grafikoa zuen lehen ordenagailua. Ez zen salmentetan arrakastatsua izan, baina “mahaigaineko sistema eragileak” deitu daitezkeen garaiaren hasiera izan zen.

LisaOS 1.0 interfaze grafikoa. Iturria: GUI Gallery

1984an Applek Macintosh kaleratu zuen, Lisa sistemaren eboluzioa zuen sistema eragilearekin, “System” izenekoa, eta bertan gaur egun arte ia aldatu ez diren atal batzuk ikus daitezke.

Macintosh-en interfaze grafikoa. Iturria: GUI Gallery

Hurrengo urtean, Microsoftek Windows 1.0 kaleratu zuen, MS-DOS sistema eragilerako GUI bat, baina ez zen 1990eko Windows 3.0 bertsiora arte bere ospea lehertu.

Windows 3.0 interfaze grafikoa. Iturria: GUI Gallery

2.3 Mahaigaineko erabilera masiboa

1990eko hamarkadaren etorrerarekin, ordenagailu pertsonalak (PC, personal computer ingelesez) ezagun bihurtu ziren eta etxeetara eta enpresetara iristen hasi ziren, eta horrek ezagutza aurreraturik ez zuten erabiltzaileen merkatua sortu zuen, erabilera erraztasuna behar zutenak.

“Boom”a Windows 3.11-rekin hasi zen, baina batez ere Windows 95-ekin, sistema eragilearen nukleoa (MS-DOS) ezkutatzea lortu zuen eta hasieratik interfaze grafikoa zuzenean erakusten zuen.

Windows 95-en interfaze grafikoa lehen abioan. Iturria: GUI Gallery

Applek NeXT (Steve Jobsek sortutako enpresa) erosi zuen eta bere sistema eragilea Mac OS 8-ren oinarri gisa erabili zuen. Ondoren, sistema eragilearen arkitektura UNIX estilokoa bihurtu zuten eta horrela Mac OS X aurkeztu zuten 2001ean.

Mac OS X 10.1 2001ean. Iturria: GUI Gallery

Urte hauetan eta 2000ko hamarkadaren hasieran, erabiltzaile-interfazeak eboluzionatzen joan ziren ordenagailuen potentzia handitzen zen heinean, baina beti mahaigaineko benetako ingurunea simulatzen jarraituz.

GNU/Linux munduan Gnome eta KDE bezalako mahaigaineko ingurune libreak iragarri ziren, paraleloan eboluzionatu zutenak eta ia “gerra” bat sortu zuten haien artean eta erabiltzaileen artean (1. esteka, 2. esteka).

Sistema eragile bakoitzak eta mahaigaineko sistema bakoitzak bere eboluzio propioak egiten zituen, eta arrakasta izanez gero, besteetan “kopiatzen” ziren, kolore, ikono edo leiho-efektuetan “modak” sortuz ere.

KDE-ren eboluzioa 1998, 2000 eta 2005ean. Iturria: Wikipedia

2.4 Web-interfazeak

90eko hamarkadaren amaieran eta 2000ko hasieran, interneten gorakadak web atariek ere euren interfazeetan eboluzio handia izatea ekarri zuen.

Amazon webgunearen eboluzioa. Iturria: VersionMuseum

Kontuan izan behar da garai hartako HTML eta CSS bertsioak ez zirela gaur egungoak bezain aurreratuak, eta javascript-en exekuzio-aukerak ere ez zirela gaur bezain indartsuak. Interfazeak teknologiak berak mugatu zitzakeen

Interfazeak une horretako teknologiek mugatu ditzakete

Bestalde, ohikoa da enpresaren irudia aldatzea, logotipo, kolore korporatibo, koloreen modaren arabera… eta horrek guztiak interfazeetan aldaketak eragiten ditu.

Twitter/X logotipoaren eboluzioa.

2.5 Mugikor-interfazeak

Telefono mugikorren kasuan, bistaratze-sistema estandarrik ez zegoenez, fabrikatzaile bakoitzak bere interfaze propioa sortzen zuen pantailak handitzen, bereizmena eta koloreak handitzen ziren heinean.

Lehen mugikorrek ez zuten pantailarik, gero pantaila txiki monokromoak izaten hasi ziren, batzuetan testu-lerro bakarrarekin.

Ericsson T10 eta Nokia 3310

Ondoren, koloretako pantailak izaten hasi ziren eta enpresa bakoitzak bere sistema eragilea sortu zuen. Enpresa askoren artean sistema eragile bat sortzeko saiakera bat izan zen Symbian, baina azkenean Nokia izan zen garatzailea eta gehien erabili zuena.

2000ko hamarkadaren lehen urteetan PDA-ak (personal digital assistant, poltsikoko ordenagailuak) ere modan jarri ziren, normalean pantaila ukigarri (erresistiboa) bat erabiltzen zutenak eta boligrafo batekin erabiltzen zirenak.

Palm

Dena aldatu zen 2007an iPhone-a eta lehen smartphone-ak iritsi zirenean, pantaila ukigarri kapazitiboek (hatzez erabiltzen direnak) protagonismoa hartu zuten. Pantaila hauek, ukigarriak izateaz gain, hainbat hatz erabiliz keinuak egiteko aukera ematen dute, interfazearekin elkarreragiteko modu berriak sortuz.

iPhone 1. belaunaldia eta HTC Desire.

Applek botoi bakarra aukeratu zuen, eta Android sistema eragileek (adibidez HTC Desire 2009koa) gutxienez lau botoi zituzten sistemako eta unean erabiltzen ari zen aplikazioko funtzio batzuk kudeatzeko.

Aldaketa hauekin, sistema eragileek eta interfazeek aldaketa erradikal bat jasan zuten, erabiltzailearen erraztasuna bilatuz eta interfazearekin elkarreragiteko “keinuak” agertuz:

  • Tap: pantaila ukitzea (saguarekin “klik” egitearen antzekoa)
  • Double tap: ukitu bikoitza, aplikazioaren arabera zoom bat egin dezake.
  • Scroll: hatzarekin gora edo behera arrastatuz interfazean mugitzea.
  • Flick: keinu azkarra gora edo behera eginez scroll egiten da; ezkerrera edo eskuinera eginez, mugimendua pantaila gehiagorik badago horren araberakoa izango da.
  • Pinch in: zooma gerturatzea.
  • Pinch out: zooma urruntzea.

Honekin guztiarekin, orain arte interfazeetan planteatu ez zen “arazo” berri bat sortzen da: gailuaren biraketa. Biraketa horrek aplikazioa egokitu behar du terminalaren posizio berrira, bertikaletik horizontala edo alderantziz pasatuz.

iOS Music aplikazioaren ikuspegi bertikala eta horizontala

Gailu hauen eboluzioarekin tablet-ak sortu ziren, keinu filosofia bera jarraituz, baina pantaila handiagoek informazio gehiago erakusteko aukera ematen dute. Mahaigaineko interfazeak erabili ordez, mugikorretako interfazeak eboluzionatu ziren.

Leku gehiago dagoenez, ez dira mugikor-aplikazioak “eskalatzen”, baizik eta interfazeek menu edo informazio gehiago gehitzeko aukera dute.

iOS Music aplikazioaren ikuspegia iPhone eta iPad-en. Iturria: 9to5mac

Interfaze bat diseinatzerakoan kontuan hartu behar dugu gailua, bere neurriak eta erabilera, erabiltzailearen esperientzia hobetzeko.

2.6 Errealitate birtuala eta errealitate areagotua

Interfazeen garapenaren hurrengo urratsa errealitate areagotuan (augmented reality) eta errealitate birtualean dago. Nahiz eta orain modan dauden terminoak diruditen, haien ikerketa eta eboluzioa hamarkadak daramatza garatzen.

Lehen urratsak “head-up display” izenekoetan eman ziren, erabiltzaileari informazioa aurkezten dioten pantaila gardenak, pantailaren atzean dagoena ikusten uzten dutenak. Horrela, erabiltzaileak ez du burua biratu behar informazioa lortzeko.

Head-up display baten adibidea hegazkin batean. Iturria:Wikipedia

Batzuetan pantaila hau erabiltzailearen eta aginte-panelaren artean egon daiteke, aginte-panelera integratuta edo pilotuaren kaskoan eta begiaren ondoan jarrita.

Bestalde, errealitate birtuala dugu, erabiltzaileari ingurune simulatua eskaintzen diona, bertan mugi daiteke eta batzuetan inguruko elementuekin elkarreragin dezake.

Horretarako, ohikoa da betaurreko batzuk erabiltzea ingurune birtuala erakusteko, eta aginte batzuk edukitzea ingurunearekin elkarreragiteko.

HTC Vive-ren kaskoa eta aginteak

Ingurunean mugitzeko, sistema batzuek trackers erabiltzen dituzte, horrela ingurune birtualean mugi gaitezke aginteak erabili gabe.

Hurrengo urratsa errealitate areagotua da, non elementu birtualak bizitza errealean integratzen saiatzen diren. Ez da berria, urteak daramatza joko eta aplikazioetan existitzen.

Errealitate areagotuko adibideak mugikorrean

Errealitate areagotua eguneroko erabilerarako izan dadin, sistemak pixkanaka eboluzionatzen hasi dira, nahiz eta kostua oraindik altua izan. Gaur egun, ez dago argi zein izango den bere onura eta errendimendua.

Apple Vision Pro kasuan, errealitate areagotuko esperientzia bat agintzen dute, eskuen keinuak erabiliz interfazean mugitzeko.

Apple Vision Pro

3 Bitxikeriak, prototipoak eta zientzia fikzioa

Atal honetan benetakoak diren baina bitxikeriak diren interfaze batzuk, oraindik ezer lortu ez duten prototipoen adibideak eta zientzia fikziozko filmen ikuspegia gehituko dira.

  • 1982ko ukipen-teknologiaren erabilera posibleen demostrazioa. Egia esan, pantaila ez da ukigarria, baizik eta inguruan sentsoreak ditu. Bideoa.

  • Jurassic Park filmean 3Dn fitxategi-sistema arakatzeko interfaze bat agertzen da. It’s UNIX!.

  • Minority Report (2002) filmean eskuarekin erabiltzen den interfaze bat agertzen da. Bideoa.

  • 2003an Microsoftek bere hurrengo Windows izango zenaren bideoa erakusten du, Longhorn izenekoa. Interfaze hau ez zen inoiz azken bertsiora iritsi, baina demostrazio bertsioak egon ziren. Azken bertsioa Vista izan zen, baina ez zen hasierako kontzeptuen antzekoa izan.

  • 2006an, OpenGL hardware bidezko azelerazioarekin, GNU/Linux banaketetan benetako 3D diseinuko leiho-kudeatzaileak sortu ziren. Alternatiba asko egon ziren, proiektu ezberdinen “fork” asko sortu baitziren, baina ezagunenak Compiz eta Beryl izan ziren. Bideoa.

  • 2006an TED hitzaldi batean Jefferson Hanek multitouch pantailaren demostrazioa egiten du, eta bertan gaur egun smartphone-ekin egunero erabiltzen ditugun keinu asko erakusten ditu. TED hitzaldia eta demostrazio bideoa.

  • 2009an Microsoftek tablet tolesgarri baten kontzeptua aurkezten du, Courier izenekoa. Bideo 1, Bideo 2. iPad-a oraindik ez zen aurkeztu.

    • Microsoftek bere webgunean tablet tolesgarrientzako interfaze kontzeptuekin hainbat orri ditu. 1. esteka, 2. esteka.
  • Iron Man filmek interfaze ikusgarri asko erakutsi dituzte, holografiko eta errealitate areagotuko mailan. Bideoa.

Android UI

4 Android UI bidezko interfazeak

Android Studio bidez Android gailuetarako interfazeak sortzerakoan, sortzen ari garen aplikazioaren arabera, bi modutara sor daitezke:

  • XML bidezko ikuspegi-diseinua: XML fitxategien bidez sortzen dira, eta editore baten bidez elementu desberdinak, murrizketak… kokatu ahal izango ditugu. Proiektua ondo funtzionatzeko eta konpilatzeko, fitxategi hauek XML estandarra bete behar dute eta baliozko fitxategiak izan behar dute. Hau zen ikuspegiak sortzeko jatorrizko sistema.
  • Jetpack Compose: framework bat da, Kotlin erabiliz, erabiltzaile-interfazeak modu deklaratiboan sortzeko. Kasu honetan, interfazeak izango dituen osagaiak programatzen dira.

Proiektu berean ikuspegiak modu desberdinetan sor daitezke, beraz, XML erabiliz sortu zen proiektu zahar batean, ikuspegiak Compose formatura migratu ditzakegu Kotlin erabiltzen badugu.

4.1 Bi ereduen arteko desberdintasunak

Zein sistema aukeratu erabakitzerakoan, bakoitzean dugun ezagutzaren araberakoa izango da, baina jarraian taula konparatibo txiki bat erakusten da:

  • XML:
    • Abantailak:
      • Kontzeptuen bereizketa: Ikuspegia eta logika argi bereizten dira
      • WYSIWYG editorea: Android Studiok editore bisual bat du, ikuspegiaren osagaiak kokatzeko aukera ematen duena. Garatzaile batzuentzat intuitiboagoa izan daiteke. WYSIWYG = What You See Is What You Get.
      • Birziklapena: XML txantiloi/layoutak sor daitezke, hainbat activityetan erabil daitezkeenak.
    • Desabantailak:
      • Mugatua: Interfaze konplexuak sortzerakoan, XML formatuak muga batzuk ditu eta Java/Kotlin kodearekin konpondu behar dira.
      • Verbosity: XML fitxategiak konplexuak eta errepikakorrak izan daitezke. Horrek ikuspegi konplexuak mantentzea zaildu dezake.
  • Jetpack Compose
    • Abantailak:
      • Sintaxi deklaratiboa interfaze konplexuak sortzea errazten duena
      • Tipatze segurua: Kotlin kodea denez, tipatze-akatsak eta exekuzioan erroreak izateko aukera murrizten da.
      • Modularitatea: Jetpack Compose-k interfazeko osagai berrerabilgarriak sortzea sustatzen du. Honek aplikazioa mantentzea eta eskalagarritasuna errazten du.
      • “Live preview”: Kodean ikuspegia sortzen den heinean aurrebista ikus daiteke.
    • Desabantailak:
      • Ikasketa-kurba hasieran gogorra izan daiteke.
      • Bateragarritasuna: Gaur egun ez luke arazoa izan behar, baina soilik erabil daiteke Android 5.0 (API level 21) edo berriagoarekin.
      • Soilik Kotlin-ekin erabil daiteke.

5 Ikuspegiak XML bidez diseinatzea

Jarraian proiektu bat nola sortzen den azaltzen da, non lehenetsita MainActivity sortuko zaigun XML formatuan ikuspegi batekin, Android View izenez ezaguna. Hau da, ikuspegiak sortzeko sistema zaharra.

Ikuspegien fitxategiak lehenetsita src/main/res/layout rutan daude gure proiektuan. Ez da ohikoa fitxategi hauek Android Studio-tik kanpo editatzea, baina non gordetzen diren jakitea garrantzitsua da.

5.1 Gure lehen proiektua sortzen

Android Studio ireki ondoren, proiektu berri bat sortuko dugu eta “Empty Views Activity” aukeratuko dugu; horrela, sortuko den proiektuak lehen ikuspegi bat izango du testu zentratua duena.

Hurrengo urratsean proiektuaren izena, bidea, programazio-lengoaia eta erabiliko dugun SDK aukeratuko ditugu. Aukeratutako aukerekin, proiektua eta beharrezko fitxategiak sortzen hasiko da aplikazioa funtziona dezan.

Ezkerreko menuan (Android aukera hautatuta) app/res/layout rutaraino zabaltzen badugu, activity_main.xml izeneko fitxategi bat dugula ikusiko dugu, eta klik eginez ikuspegi hau ikusiko dugu:

5.2 “Diseinu”, “blueprint” eta kode ikuspegia

Ikuspegiekin elkarreragitean hiru aukera izango ditugu:

  • Diseinu ikuspegia: Erabiltzaileak ikusiko duenaren antzekoena da. Horrela, interfazeak dituen elementuak eta edukia ikus ditzakegu.

  • Blueprint ikuspegia: “Cianotipo” edo plano ikuspegia ere deitua. Ingeniaritza planoak simulatzen ditu eta hemen elementu bakoitzaren mota bakarrik ikusiko dugu. Edukitik abstraitzeko eta diseinuan zentratzeko egokia da.

  • XML kodea: Ikuspegiaren XML fitxategiaren edukia da. Testua aldatuz aldaketak egin ditzakegu. Parametro zehatz bat aldatu nahi badugu, hau da ikuspegi egokiena.

5.3 Interfazeko osagaiak

Android Studio-k interfazeak sortzerakoan hainbat osagai eskaintzen ditu, zuzenean arrastatu eta interfazean kokatu daitezkeenak.

Argi izan behar da bakoitzak bere ezaugarriak dituela, beraz, garrantzitsua da dokumentazio ofiziala kontsultatzea bakoitza erabiltzerakoan.

5.4 Layout-ak eta constraints-ak

Hasierako ikuspegiarekin, “Hello World!” testua hautatzen badugu, Layout atalean honako konfigurazioa ikusiko dugu:

4 constraint identifika daitezke, osagaiaren puntu desberdinei dagozkienak:

  • Start: Osagaiaren ezkerreko aldea.

  • End: Osagaiaren eskuineko aldea.

  • Top: Goiko aldea.

  • Bottom: Beheko aldea.

Horrela, osagai bakoitzaren zati bakoitzak constraint bat izango du, kasu honetan, guraso layout-aren zati bati lotuta. XML fitxategiaren kodea begiratuz gero, bakoitza nola idatzita dagoen ikus daiteke:

TextView baten XML kodea

<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

Interfazean botoi bat gehitzen badugu, pantailaren behealdean, zentratuta eta nahi dugun posizioan, simulagailuan exekutatzean ez da agertuko nahi genuen posizioan.

XML-ko “layout_editor” atributuak editorearen ikuspegirako bakarrik dira, ez azken ikuspegirako. Elementuak behar bezala kokatzeko constraints erabili behar dira.

Horregatik, interfazean gehitu nahi dugun osagai bakoitzak bere constraintak izan behar ditu beste osagai edo guraso layout-arekin. Ez badugu bat gehitu edo ikuspegian zerbait ez badago ondo, interfazean honako hau agertuko da:

Osagaiak beste osagai batzuei lotuta egon daitezke, baina ez dute zertan elkarri lotuta egon. Adibidez, hurrengo ikuspegian, horizontalean honako hau ikus daiteke:

  • “Hello World” testua guraso layout-aren bi aldeetara lotuta dago, eta horregatik agertzen da zentratuta.

  • “Hello3” testua duen osagaia testua baino zabalagoa da (layout_width atributua). Ezkerrean beste osagaiari lotuta dago eta eskuinean ikuspegiari, eta horregatik bien artean agertzen da.

5.4.1 Kateak

Kateak osagai (edo ikuspegi) talde bat elkarri lotzeko balio dute, bi norabidetan. Kateak bertikalki eta horizontalki egin daitezke. Hiru elementu zentratuekin kate bertikalaren adibidea:

5.5 Ikuspegi bertikala eta horizontala

Gure gailuek posizioa biratu dezakete, eta beraz, pantailan agertzen diren osagaiak posizio berrira egokitu beharko lirateke.

Horregatik, interfazeak diseinatzerakoan, osagaien posizioarekin zer egin pentsatu behar dugu: posizioz aldatzen diren, ezkutatzen diren, menu gisa bihurtzen diren…

Lehenetsita, gailua biratzean, osagaiak mugituko dira konfiguratutako layout eta constraint-en arabera. Proiektua sortzean sortutako ikuspegian, gailua biratzean hau gertatuko da:

Ikus daitekeenez, “Hello World!” testua ikuspegiaren erdigunean mantentzen da, testuak interfazearekin dituen constraints-ak direla eta.

5.5.1 Ikuspegiak bereizten

Gailuaren posizio desberdinetarako ikuspegi desberdinak izan nahi baditugu, baliteke elementu guztiak ez izatea interesatzen, edo ez egotea leku berean.

Adibidez, iOS kalkulagailuak gailua biratzean aukera gehiago eskaintzen ditu, kalkulagailu zientifiko bihurtuz.

Ikuspegi bat sortzen badugu “landscape” modurako aldaketarik egin gabe, honako emaitza lortuko dugu:

Ikus daitekeenez, botoien kokapena berdina da bi ikuspegietan, baina modu horizontalean ez da erabilgarria. Emaitza ikusgarria izan arren, ikuspegiak ez luke zentzurik izango.

Aldiz, ikuspegi apaisaturako konposizio desberdina egiten badugu, emaitza hobea lortuko dugu, elementuak beste modu batean kokatuta, erabilgarriagoa izanik.

Kalkulagailua interfaze onarekin

Ikuspegi bereiziak izateko, ikuspegi apaisatua sortu behar dugu dagoen ikuspegiaren gainean. Horretarako, ikuspegiaren editorean, desplegablean klik egin eta “Create Landscape Qualifier” hautatu beharko dugu.

Honek proiektuaren zuhaitzean jatorrizko ikuspegiaren izena duen karpeta bat eta bi fitxategi sortuko ditu: jatorrizkoa eta beste bat, “land” gehituta, apaisatuaren bertsioa dela identifikatzeko.

Honi esker, ikuspegi berri bat sortuko da, jatorrizko ikuspegiaren elementu guztiekin, constraints-ak mantenduz. xml fitxategi berria ikuspegi apaisatuentzako sortutako direktorioan egongo da: app/src/main/res/layout-land.

5.6 Interfazeari funtzionalitatea ematea

Android-erako programatzen nola egiten den sakondu ez arren, adibide txiki bat gehituko da botoi bat eta testu bat nola funtzionatzen duten eta elkarrekin nola elkarreragin ulertzeko.

Ideia da:

  • Botoi bat eta TextView bat dituen interfaze bat sortzea.
  • Botoia sakatzean, TextView-aren jatorrizko testua desagertzen da eta botoia zenbat aldiz sakatu den erakusten du.

Hau kontuan hartuta, MainActivity.kt fitxategiaren kodea honela geratuko litzateke:

Botoi bat funtzionatzeko Kotlin kodea

//... imports previos
import android.widget.Button
import android.widget.TextView

class MainActivity : AppCompatActivity() {

    var contador:Int = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        //... código ya existente

        val button:Button = findViewById(R.id.button)
        val text:TextView = findViewById(R.id.textView)

        button.setOnClickListener {
            contador = contador+1
            text.text= (contador).toString()
        }
    }
}

Zer gertatzen da datuekin pantaila biratuz gero?

6 Jetpack Compose bidezko ikuspegiak diseinatzea

Kasu honetan, proiektua “Empty Activity” aukera hautatuz sortuko dugu, eta horrek proiektu bat sortuko du lehenetsita MainActivity klasearekin, ikuspegiak sortzeko sistema berria Jetpack Compose erabiliz, eta beraz sintaxi deklaratiboa erabiliz.

Proiektua sortzen amaitzean, ikuspegiaren Split sistema erabiltzen badugu, iturburu kodearen ondoan mezua ikusiko dugu, ikuspegia “eraiki” eta eguneratu behar dugula denbora errealean emaitza ikusteko. Klik eginez gero, ikuspegia eraikiko da eta ordutik aurrera denbora errealean aurrebista izango dugu, hemen agertzen den bezala:

6.1 Sortutako ikuspegi lehenetsia ulertzen

Proiektuak sortu digun ikuspegiak hainbat atal ditu, aldaketak egiteko eta aurrebistan zer gertatzen ari den ulertzeko.

6.1.1 Ikuspegi widget bat sortzen duen funtzioa

Aurrean esan bezala, Compose-k ikuspegiak, edo haien zatiak, berrerabilgarriak izatea bilatzen du. Kasu honetan, proiektua sortzeko laguntzaileak fun Greeting(...) funtzioa sortu digu, Text motako osagai txiki bat sortzen eta bistaratzen duena, funtzioari pasatzen zaion parametroa eta posible den beste bat erabiliz (geroago hitz egingo dugu horiei buruz).

Testua sortzen duen widget-a

@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    Text(
        text = "Hello $name!",
        modifier = modifier
    )
}

Funtzio honetatik interesgarria dena @Composable anotazioa da, “konponagarritasuna” duten funtzio guztiek izan behar dutena. @Composable honek Compose konpiladoreari adierazten dio funtzio hau datuak IU bihurtzeko diseinatuta dagoela.

6.1.2 Compose-ren aurrebista

Compose erabiltzean dugun abantaila bat da interfazeak idazten ditugun heinean aurrebista izan dezakegula, terminalaren emuladorea erabili beharrik gabe, eta horrek baliabide gutxiago kontsumitzea dakar. Aurrebista sortzen duen funtzioak @Preview anotazioa du, eta hainbat parametro gehi dakioke.

Aurrebista sortzen duen funtzioa

@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
    JetpackTheme {
        Greeting("Android")
    }
}

Aurrean ikusi den bezala, “Hello Android” erakusten duen aurrebista dugu, baina ikuspegi honek ez du interfaze erreala simulatzen. Ez da txarra, interfazean edo sortzen ari garen widget-ean soilik zentratu gaitezkeelako.

Interesatzen zaizkigun aurrebista adina izan ditzakegu, gailu desberdinetarako, modu argi/ilunean… Aurrebista berriak sortzeko, @Preview anotazio berri bat gehitu behar dugu interesatzen zaizkigun parametroekin. Adibidez:

Parametro desberdinekin aurrebista berriak

@Preview(showBackground = true, showSystemUi = true, 
    uiMode = Configuration.UI_MODE_NIGHT_YES)
@Preview(showBackground = true, showSystemUi = true,
    device = "id:pixel_fold")
@Preview(showBackground = true, showSystemUi = true,
    device = "spec:width=411dp,height=891dp,orientation=landscape")

Adibide hauetan hainbat parametro gehitu dira @Preview anotazioari:

  • showSystemUi: gailu batean exekutatzen ari balitz bezala erakusten du interfaze osoa.
  • uiMode: Configuration.UI_* balioak onartzen ditu. Adibidean, gaueko modua erabiliko du.
  • device: gailu zehatz bat adierazi dezakegu bere id-arekin.
    • Gure gailu mota propioa sor dezakegu spec: parametroarekin, orientazioa ere adierazi dezakegu.

Aukera gehiago daude dokumentazio ofizialean.

6.1.3 MainActivity-ko ikuspegia

Aurreko guztia ikusita, orain gure MainActivity klaseko funtzio nagusian zer gertatzen den ulertzeko garaia da, aplikazioa abiaraztean exekutatuko dena, aurreko proiektuan bezala, onCreate.

MainActivity Jetpack Compose kodearekin

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            JetpackTheme {
                Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
                    Greeting(
                        name = "Android",
                        modifier = Modifier.padding(innerPadding)
                    )
                }
            }
        }
    }
}

Funtzio honetan setContent blokeak jardueraren diseinua definitzen du, eta bertan konposagarriak diren funtzioak deitzen dira. Funtzio hauek soilik mota bereko beste funtzio batzuetatik deitu daitezke.

Ondoren, dena JetpackTheme barruan dago, hau ui/theme/Theme.kt fitxategian deklaratuta dagoen funtzio bat da. Funtzio honek gailua modu argian edo ilunean dagoen bereizten du, sortu dugun gaia erabiliz.

6.2 Elementuen antolamendua

Interfazeak sortzerakoan, elementuen konposizioa/antolamendua (layout ingelesez) pentsatu behar dugu. Dokumentazio ofizialean antzeko adibide bat dago, eta gomendagarria da begiratzea.

Honako interfaze sinple hau suposatuko dugu, ezkerrean interfaze finala nola geratuko litzatekeen eta eskuinean elementuen antolamendua nabarmentzen duen irudia.

Benetako ikuspegia eta antolamendua

Diseinatutako antolamendua ikusita, programazio deklaratibora bihurtzerakoan sortu ditugun atal desberdinak eta osagaiak nola kokatuko diren ulertu behar dugu. Komponenteak nola kokatzen diren ulertzea garrantzitsua da.

Composer-ekin programazioan lehen iterazio bat honela geratuko litzateke. Osagaiak edukiarekin hardcodeatuta daude, eta sortutako funtzioak beti edukia bera erakutsiko du. Bordeak jarrita hobeto ikusiko genuke non hasten den osagai bakoitzak.

Compose kodearekin funtzioa

@Composable
fun Post() {
    Column {
        Column {
            Text("title")
            Text("subtitle")
        }
        Image(
            painter = painterResource(R.drawable.dragon),
            contentDescription = null
        )
        Text("Lorem ipsum dolor sit amet, conse...")
        Row {
            Column {
                Image(
                    painter = painterResource(R.drawable.goku),
                    contentDescription = null
                )
            }
            Column {
                Text("Author")
                Text("2024-09-01")
            }
        }
    }
}

Kodean, elementuak kokatzeko honako funtzioak erabili dira:

  • Column: seme osagai guztiak sekuentzia bertikalean jartzen ditu.
  • Row: seme osagaiak sekuentzia horizontalean kokatzeko.

6.3 Elementuen modifikatzaileak

Aurreko funtzioak Composer-en funtzioak erabiliz elementuak kokatzen ditu, baina interfaze atsegina eta azken emaitza lortzeko, elementu bakoitzari modifikatzaileak gehitu behar dizkiogu. Hemen erabakiko dugu “nola polit egin” interfaze hori.

Modifikatzaileak bloke mailan edo elementu mailan gehi daitezke. Modifikatzaileen lehentasunekin kontuz ibili behar da.

Modifikatzaileak bloke mailan edo elementu mailan gehi daitezke, eta erabilitako adierazpen motarekin kontuz ibili behar da, batzuk besteek baino lehentasun handiagoa dutelako.

Modifikatzaile desberdinak gehituz, kodea honela geratuko litzateke:

Modifikatzaile desberdinak gehituta

@Composable
fun Post() {
    Column (
        modifier = Modifier // FALTA CÓDIGO
    ) {
        Column (
            horizontalAlignment = Alignment.CenterHorizontally,
            modifier = Modifier
                .padding(10.dp)
                .fillMaxWidth()
                // FALTA CÓDIGO
        ) {
            Text(
                text = "title",
                modifier = Modifier.padding(bottom = 15.dp)
            )
            Text("subtitle")
        }
        Image(
            painter = painterResource(R.drawable.dragon),
            contentDescription = null
        )
        Text(
            text = "Lorem ipsum dolor sit amet, conse...",
            modifier = Modifier // FALTA CÓDIGO
        )
        Row (
            verticalAlignment = Alignment.CenterVertically,
            modifier = Modifier // FALTA CÓDIGO
        ){
            Column {
                Image(
                    painter = painterResource(R.drawable.goku),
                    contentDescription = null,
                    modifier = Modifier
                        .clip(CircleShape)
                        .background(color = Color.LightGray)
                        .size(100.dp)
                        .padding(5.dp)
                )
            }
            Column (
                Modifier.padding(start = 10.dp)
            ) {
                Text("Author")
                Text("2024-09-01")
            }
        }
    }
}

Modifikatzaile desberdinak gehitu dira bai zutabe/errenkada mailan, bai azken osagai mailan. Kodea nahiko auto-azalgarria da. Adibideko kodea ez dago osorik, iruzkinak gehitu dira falta den kodea adierazteko, modifikatzaileetan ertzak marrazteko. Ertzak elementu multzo bakoitzaren antolamendua ikustea errazten dute

Osatu aurreko kodea ertzen modifikatzaileak gehituz, erakutsitako irudira ahalik eta gehien hurbiltzeko.

Aldatu aurreko kodea, testuen edukia parametro gisa jasotzeko.

6.3.1 “Alfer”/lazy osagaiak

Adibidean Column eta Row konposizio sistemak erabiltzen ari gara elementuak kokatzeko. Elementu gutxi edo seme kopuru finitua dugunean, sistema hauek erabiltzea zuzena da. Arazoa sortzen da seme kopuru zehaztugabea dugunean, adibidez elementu zerrenda bat. Kasu hauetan LazyColumn (edo errenkadentzako LazyRow) erabiliko dugu, pantailan dauden elementuak bakarrik renderizatuko baititu, kasu hauetan eraginkorragoa izanik.

6.3.2 Modifikatzaile berrerabilgarriak

Modifikatzaile berdinak hainbat osagaitan erabiltzen baditugu, aldagaia sor dezakegu eta osagai desberdinetan esleitu.

6.4 Ikuspegi bertikala eta horizontala

Orain arte sortu dugun adibidearekin gailua biratzen badugu, elementuen antolamendua ondo mantentzen da, baina ez dugu scroll-ik. Column osagaiak ez du scroll-a lehenetsita, beraz, modifikatzaile nagusian gehitu behar dugu:

Modifikatzaile desberdinak gehituta

@Composable
fun Post() {
    Column (
        modifier = Modifier // FALTA CÓDIGO
            .verticalScroll(rememberScrollState())
    ) {
        //...
    }
}

Horrela, ikuspegi horizontalean gure aplikazioak scroll izango du, zutabe nagusiari ezaugarri hori gehitu diogulako.

Bestalde, ikuspegiaren konposizioa gailua bertikalean edo horizontalean dagoenaren arabera desberdindu nahi badugu, honela egin dezakegu:

Konposizio desberdina bertikalean edo horizontalean

// Uneko konfigurazioa hartzen dugu
val configuration = LocalConfiguration.current

// Egoeraren arabera konposizio desberdina egiten dugu
when (configuration.orientation) {
    Configuration.ORIENTATION_LANDSCAPE -> {
        LandscapeScreenComposition()
    }
    else -> {
        VerticalScreenComposition()
    }
}

6.5 Gai pertsonalizatuak sortzea

Aplikazioa sortzerakoan interesgarria izan daiteke “gai” (ingelesez theme) pertsonalizatua izatea. “Gai” hauek aplikazioaren koloreei, tipografiari… egiten diete erreferentzia. Gai hau desberdina izango da gailua modu “argian” edo “ilunean” dagoenaren arabera.

Aplikazioen pertsonalizazioa “gai”/themes bidez egiten da, normalean kolore korporatiboak, letra motak, tamainak…

Proiektua sortzean ui/theme izeneko direktorio bat dagoela ikusiko dugu, MainActivity.kt fitxategia dagoen bide berean. Bertan hiru fitxategi aurkituko ditugu, eta gomendagarria da haien edukia ikustea:

  • Color.kt: Aplikazioan erabiliko diren koloreak dituen aldagaiak ditu. Koloreak hainbat modutan defini daitezke eta “Alpha” tartea (opakutasuna) izan dezakete. Kolore sistema propioa sor dezakegu eta hainbat rol erabil ditzakegu aplikazioan.

Kolore sistema ona sortzeak gure marka/enpresa besteengandik bereiz dezake.

  • Type.kt: Fitxategi honetan tipografiak, letra mota, mota, tamaina… definitzen dira. Lehenetsita hiru eskala daude (“Large”, “Medium” eta “Small”) hurrengo rolentzat:
    • Display: Pantailako testurik handiena, testu labur edo zenbakietarako. Pantaila handietan hobe funtzionatzen dute. Normalean letra “adierazgarriak”, eskuz idatzitakoak erabiltzen dira.
    • Headline: Pantaila txikiagoetan testu laburretarako egokiak. Testu pasarteak edo edukiko atal garrantzitsuak markatzeko erabilgarriak.
    • Title: Erdi-mailako garrantzia duten testu laburretarako erabili behar dira.
    • Body: Testu luzeetarako erabiltzen da. Letra oso adierazgarriak edo apaingarriak saihestu behar dira, irakurtzeko zailagoak izan daitezkeelako.
    • Label: Osagaien barruko testurako erabiltzen da. Adibidez, botoiek LabelLarge estiloa erabiltzen dute.
    Estiloen azalpena eta tipografia desberdinen adibideak hemen eta Github-eko adibide proiektu honetan.
  • Theme.kt: Gaiaren fitxategi nagusia da, eta aurreko fitxategietan zehaztutakoa erabiltzen du. Proiektu berri baten fitxategiak honako hau dauka:

Theme.kt fitxategia

package com.example.jetpack.ui.theme    
//... 
private val DarkColorScheme = darkColorScheme(
    primary = Purple80,
    secondary = PurpleGrey80,
    tertiary = Pink80
)

private val LightColorScheme = lightColorScheme(
    primary = Purple40,
    secondary = PurpleGrey40,
    tertiary = Pink40
)

@Composable
fun JetpackTheme(
    darkTheme: Boolean = isSystemInDarkTheme(),
    // Dynamic color is available on Android 12+
    dynamicColor: Boolean = true,
    content: @Composable () -> Unit
) {
    val colorScheme = when {
        dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
            val context = LocalContext.current
            if (darkTheme) 
                dynamicDarkColorScheme(context) 
            else
                dynamicLightColorScheme(context)
        }
        darkTheme -> DarkColorScheme
        else -> LightColorScheme
    }

    MaterialTheme(
        colorScheme = colorScheme,
        typography = Typography,
        content = content
    )
}
  • Shapes.kt: Proiektu berri batean ez da fitxategi hau sortzen, baina adibide honetan bere edukia ikus daiteke. Fitxategi honetan aplikazioan erabil daitezkeen formak alda daitezke.

Badira hainbat tutorial (1. tutoriala eta 2. tutoriala) kolore propioekin gaiak sortzeko.

Material Theme Builder tresnak gure gai pertsonalizatua sortzen laguntzen digu.

6.6 Gertaerak Compose-n

Dokumentazio ofizialak dioen bezala, Compose deklaratiboa da eta, beraz, eguneratzeko modu bakarra konposagarritasuna duen elementuari argumentu berriak pasatzea da. Argumentu hauek IU-aren egoeraren adierazpenak dira. Egoera eguneratzen den bakoitzean, berrikomposizioa gertatzen da.

  • Konposizioa: Jetpack Compose-k IU-aren deskribapena egiten du konposagarritasun elementuak exekutatzean.
  • Hasierako konposizioa: Konposizio baten sorrera, konposagarritasun elementuak lehen aldiz exekutatzean.
  • Berrikomposizioa: Konposagarritasun elementuak berriro exekutatzea, datuak aldatzen direnean konposizioa eguneratzeko.

Konposagarritasuna duen elementuari espresuki jakinarazi behar zaio egoera berria, behar bezala eguneratzeko.

Compose-k jakin behar du zein egoerari jarraipena egin behar dion, eguneraketa jasotzen duenean berrikomposizioa programatu ahal izateko. Compose-k soilik aldatu behar diren funtzioak berrikompilatuko ditu. Horretarako, Compose-ren State eta MutableState motak erabiliko ditugu, Compose-k egoera behatu ahal izateko. Mutablestate funtzioak bere value eguneratu dezake egoera eguneratzeko.

Kontagailuaren adibidea egingo dugu, bere funtzioa honakoa izango litzateke:

Kontagailuaren funtzioa

@Composable
fun Contador(modifier: Modifier = Modifier) {
    var contador: MutableState<Int> = remember { mutableStateOf(0) }

    Surface(modifier = Modifier.fillMaxSize()) {
        Column(
            horizontalAlignment = Alignment.CenterHorizontally
        ) {
            Text("${contador.value}")
            Button(
                onClick = {
                    contador.value++
                }
            ) {
                Text("Suma!")
            }
        }
    }
}

“contador” aldagaia “MutableState” motakoa da, botoia sakatzean eguneratzen dena, eta Compose-k bere “value” eguneratu dela detektatzean, ikuspegiaren zati hori berrikompilatzen du, balio berria erakutsiz.

Zer gertatzen da datuekin pantaila biratuz gero?

Egoerei eta ikuspegiaren eguneratzeei buruz gehiago dokumentazio honetako adibidean eta beste honetan

7 Android-eko Activity-aren bizi-zikloa

Ikuspegiaren edukia berrezarri egiten da gailua biratzean. Hau da, ikuspegian egon daitekeen edozein edukia, gordeta ez badago, galdu egiten da. Hau ikuspegiaren Activity-a suntsitu eta pantailaren egoera berrian berriro sortzen delako da.

Gailua biratzean Activity-ak suntsitze-sorkuntza zikloan sartzen da

Garrantzitsua da jakitea zer gertatzen den gailua biratzean, eta zer gertatzen den ikuspegiarekin eta aurreko planoan ditugun osagaiekin.

Activity-ren bizi-zikloan hainbat funtzio daude, sistema bakoitzean egoera bakoitzean deituko dituenak:

Activity-lifecycle-aren eskema. Iturria: Dokumentazio ofiziala

Eskeman (eta dokumentazioaren webgunean) egoerak eta haien trantsizioak ikus daitezke.

Orain, aldagaien egoera gorde nahi badugu egoera aldaketetan erabiltzeko, ikuspegi motaren arabera aldatuko da, XML edo Compose erabiltzen dugunaren arabera. IU egoerak nola gorde dokumentazioan zein metodo erabili behar diren azaltzen da.

7.1 Egoerak XML-rekin mantentzea

Ikuspegiaren egoeren trantsizioak nola funtzionatzen duten jakinda, egoera gorde eta Activity berriro sortzean informazioa berreskuratzeko garaia da. Horretarako bi funtzio erabiliko dira:

  • onSaveInstanceState : Activity-a suntsitu aurretik deituko da.
  • onRestoreInstanceState: onCreate metodoa deitu eta berehala deituko da.

Aurreko adibidearekin jarraituz, botoia zenbat aldiz sakatu den gorde nahi badugu, honelako zerbait gehitu beharko genuke:

Egoerak mantentzeko Kotlin kodea

override fun onResume(){
    super.onResume()
    Log.d("Debug","onResume")
    val text:TextView = findViewById(R.id.textView)
    text.text = contador.toString()
}

override fun onSaveInstanceState(outState: Bundle) {
    // Erabiltzailearen jokoaren egoera gorde.
    outState?.run {
        putInt("contador", contador)
    }
    // Beti deitu superklaseari ikuspegiaren hierarkia gorde dezan.
    super.onSaveInstanceState(outState)
}

override fun onRestoreInstanceState(savedInstanceState: Bundle) {
    // Beti deitu superklaseari ikuspegiaren hierarkia berreskuratu dezan.
    super.onRestoreInstanceState(savedInstanceState)
    // Egoera kideak berreskuratu gordetako instantziatik.
    savedInstanceState?.run {
        contador = savedInstanceState.getInt("contador")
    }
}

Gehitu MainActivity.kt-n beharrezko funtzioak pantaila biratzean trantsizio guztiak ikusteko. Funtzioek Logcat-en exekutatu dena erakutsi dezatela.

7.2 Egoerak Compose-rekin mantentzea

Konposagarritasun elementuen bizi-zikloa Jetpack Compose-n desberdina da, berrikomposizioa osagai mailan egiten baita, ez ikuspegi osoan.

Aldagaien egoera berrikomposizioen artean gordetzeko, “rememberSaveable” mota erabiliko dugu. Honek gailua biratzean aldagaien balioa mantentzea ahalbidetuko digu:

Egoera mantentzea

@Composable
fun Contador(modifier: Modifier = Modifier) {
    var contador: MutableState<Int> = rememberSaveable { mutableStateOf(0) }
    // ...
}

“rememberSaveable” erabiliz, egoera berrikomposizioan gordetzea ahalbidetzen digu, baina jardueraren bizi-zikloak beste egoera batzuk izan ditzakeenez, ez da beti erabilgarria izango.

“rememberSaveable” erabiltzeak ez du jarduera berriz sortzean egoera gordetzen.

Egoera konplexuagoak kudeatzeko, IU egoerak nola gorde eta egoera eta Jetpack Compose dokumentazioan informazio gehiago

Aplikazioen Garapena

8 Sarrera

Aplikazioak garatzerakoan, kontuan hartu beharreko hainbat gai daude, aplikazioak espero diren funtzionalitateak eta erabilgarritasuna betetzen dituela ziurtatzeko. Alderdi horietako batzuk kontuan hartzen ez badira, azken aplikazioa zaila izan daiteke erabiltzeko, ez da egokituko aurreikusitako helburuetara, erabilgarritasun-akatsak izan ditzake… Are gehiago, aplikazio baten alderdi guztiak elkarren artean erlazionatuta daude, grafiko honetan ikus daitekeen bezala.

Erabiltzaile-esperientziaren espektroa. Erreferentzia.

Espektro hori sinplifikatzen badugu eta proiektu baten beharretan soilik zentratzen bagara, erabiltzaile-esperientziarako kontuan hartu beharreko elementuak ere sinplifikatzen dira, baina garrantzia mantenduz.

Ildo horretan, Jesse James Garrett erabiltzaile-esperientziarekin lotutako elementuak bost geruzatan banatzen ditu. Hasiera batean web sistemei buruz ari bazen ere, mahaigaineko eta mugikorreko aplikazioetan ere baliagarriak dira.

Jesse James Garrett-en arabera UX elementuak. Iturri itzulia

9 Kontzeptuak definitzen

Aplikazio bat garatzerakoan, erabilerari dagokionez, hainbat terminologia erabiltzen da, batzuetan sinonimo gisa edo nahastuta, eta horrek ulermena zailtzen du.

9.1 Elkarreraginaren diseinua

Wikipediaren arabera, elkarreraginaren diseinua (IxD laburtuta), “produktuen, inguruneen, sistemen eta zerbitzu digitalen elkarreragileak diseinatzeko jarduna” da. Definizio hau ez da soilik ingurune digitaletara mugatzen, mundu errealera ere aplika daiteke.

Diseinuan akatsa

Laburbilduz, honela adieraz daiteke:

  • Erabiltzaileak zein ekintza egin behar dituen aplikazioa erabiltzean bere helburua lortzeko.
  • Ekintza horiek nola egin behar dituen.

Garrantzitsua da sistemak eraginkorrak, efizienteak eta errazak izatea erabiltzeko, bestela, gure aplikazioa ona izan arren, erabiltzaileek ez erabiltzea erabaki dezakete.

Gure aplikazioa erabiltzeko erraza ez bada, erabiltzaileek erabiltzen uztea erabaki dezakete.

Helburua izan behar da erabiltzaileek egin ditzaketen akatsak minimizatzea, erabiltzailearen gogobetetasuna handitzea, frustrazioa murriztea eta, azken batean, pertsonen eta aplikazioaren inguruko zereginak produktiboagoak egitea.

9.2 Erabilgarritasuna

Erabilgarritasuna neologismo bat da (ingelesezko usability, erabilerraztasuna), pertsonak tresna edo objektu bat nola erraz erabil dezaketen adierazten duena. Informatikan, aplikazio, webgune, makina, prozesu… bati aplika dakioke.

Erabilgarritasuna tresna horien azterketari ere egiten dio erreferentzia, normalean garapenaren aurretik edo bitartean, horien erabilgarritasun maila zein izango den zehazteko. Horretarako, proba enpiriko eta erlatiboak egiten dira:

  • Enpirikoa: iritzi edo sentsazioetan oinarritu gabe, laborategian edo eremuko lanetan egindako erabilgarritasun-probetan oinarritzen da (adibidez, erabiltzaileekin).
  • Erlatiboa: emaitza ez da ona edo txarra, ezarritako helburuen edo antzeko beste sistema batzuen aldean alderatzen da.

Jakob Nielsenek erabilgarritasuna web interfazeak erabiltzeko errazak diren neurtzen duen kalitate-atributua dela definitu zuen.

Jakob Nielsen, bere Usability Engineering (1993) liburuan, bere “Erabilgarritasun Helburuak”en bost kalitate-osagaiak definitzen ditu:

  • Ikasteko gaitasuna: Erabiltzaileek lehen aldiz diseinua ezagutzen dutenean, oinarrizko zereginak nola erraz egin ditzaketen.
  • Eraginkortasuna: Erabiltzaileek diseinua ikasi ondoren, zereginak zein azkar egin ditzaketen.
  • Oroimena: Erabiltzaileek diseinura itzultzen direnean denbora batez erabili gabe egon ondoren, gaitasuna nola berreskuratzen duten.
  • Akatsak: Erabiltzaileek zenbat akats egiten dituzten, akats horiek zenbateraino diren larriak eta nola erraz berreskura daitezkeen.
  • Gogobetetasuna: Diseinua erabiltzea zein atsegina den.

ISO 9241 araua existitzen da, erabilgarritasunaren eta hardware eta softwarearen ergonomiaren kalitatera bideratua.

9.3 Erabiltzaile-esperientzia

Erabiltzaile-esperientzia (UX) erabiltzailearen eta ingurune edo gailu jakin baten arteko elkarreraginari dagozkion faktore eta elementu multzoa da, zerbitzu, produktu edo gailu horren pertzepzio positibo edo negatiboa sortuz.

Erabiltzaile-esperientzia kontzeptu subjektiboa da, erabiltzailearen elkarreraginarekin batera emozioak, sentimenduak eta markaren transmisioa bezalako alderdi erlatiboak ere egon daitezkeelako…

Hasiera batean, erabiltzaile-esperientziari garrantzia ematen hasi zitzaion informatikan, interneten gorakadarekin eta web orrien garapenarekin batera.

Erabiltzaile-esperientzia ona diseinatzeko, elkarreraginaren diseinu egokia eta interfaze on batetik abiatu behar dugu.

Bestalde, erabiltzaile-esperientzia erabiltzailearen aurreiritziek eta bere esperientziak ere alda dezakete: aplikazio bat beste antzeko baten moduan erabiltzen saiatzea,

Helburu antzekoak dituzten aplikazio askok interfaze antzekoak izaten dituzte, erabiltzaileen trantsizioa errazteko.

9.4 Erabiltzaile-interfazea

Erabiltzaile-interfazea (ingelesez user interface, UI) erabiltzailearen eta produktuaren (aplikazioa edo zerbait fisikoa izan daiteke) arteko geruza da.

Interfaze honetan agertuko dira erabiltzaileak zuzenean elkarreragingo duen elementu guztiak. Elementu horiek gertaerak sortuko dituzte edo produktuan jarduera bat egingo dute, normalean irteera/erantzun bat sortuz.

9.4.1 Erabiltzaile-interfaze baten diseinu-prozesuak

Erabiltzaile-interfazearen diseinua diseinu industrialarekin lotutako diziplina da eta erabilgarritasuna eta erabiltzaile-esperientzia maximizatzea du helburu.

Erabiltzaile-interfazea diseinatu aurretik, argi izan behar dugu aplikazioa erabiliko duen pertsonaren eta aplikazioaren arteko elkarreragina nolakoa izan nahi dugun.

Interfazea diseinatzeko, giza-aplikazio elkarreragina argi izan behar dugu.

Interfazea diseinatzeko, gutxienez, honako puntu hauek kontuan hartu behar dira:

  • Sistemak proiektuaren helburuak betetzeko behar dituen elementu funtzionalen zerrenda egitea. Horretarako, proiektuaren eskakizunak argi izatea beharrezkoa da.
  • Aplikazioaren erabiltzaile potentzialak eta egingo dituzten zereginak aztertzea. Normalean, eremuko lana eginez, erabiltzaileek zereginak nola egiten dituzten aztertuz, elkarrizketak eginez… Erantzun beharreko galdera batzuk:
    • Zer nahi luke erabiltzaileak sistemak egitea?
    • Nola egokituko litzateke sistema lan-fluxuan edo eguneroko jardueretan?
    • Erabiltzailea teknologikoki zein mailatan dago eta zein antzeko sistema erabiltzen ditu?
    • Zein itxura eta jokabide estilo dira erabiltzailearen gustukoenak?
  • Garrantzitsua da informazioaren arkitektura nolakoa den argi izatea, hau da, informazioa aztertzea, antolatzea, egituratzea eta aurkeztea.
  • Interfazeak diseinatzerakoan, prototipatze-sistemak erabiltzea erabilgarria da, horretarako tresna espezifikoak erabiliz. Batzuetan, oinarrizko funtzionalitatea ere izan dezakete.
  • Aurretik aipatu da, baina garrantzitsua da erabilgarritasun-probak egitea, erabiltzaileak aplikazioa erabiltzen duen bitartean pentsatzen duena adieraz dezan.

9.4.2 Erabiltzaile-interfaze baten diseinuaren printzipioak eta eskakizunak

Sistema baten ezaugarri dinamikoak elkarrizketa-eskakizunen arabera deskribatzen dira.

ISO 9241 arauak ergonomiaren oinarrizko kontzeptu eta elementu batzuk ezartzen ditu, sistemaren eta erabiltzaileen arteko elkarrizketa errazteko abiapuntu gisa, goi-mailako definizioak, aplikazio adierazgarriak eta printzipioen adibideak barne. Printzipio aplikagarriak interfazearen alderdi dinamikoak dira eta, oro har, interfazeak sortzen duen “sentsazioa” bezala har daitezke.

Wikipediaren arabera, zazpi printzipio hauek dira:

  • Zereginera egokitasuna: elkarrizketa egokia da erabiltzaileari zeregina eraginkortasunez eta efizientziaz burutzen laguntzen dionean.
  • Auto-deskribatzailea: elkarrizketa auto-deskribatzailea da, elkarrizketaren urrats bakoitza berehala uler daitekeenean, sistemak berak emandako informazioaren bidez edo erabiltzaileak eskatuta azalpen baten bidez.
  • Erabiltzailearen itxaropenekin bat etortzea: elkarrizketa erabiltzailearen itxaropenekin bat dator, koherentea denean eta erabiltzailearen ezaugarriekin bat datorrenean, hala nola zereginaren ezagutza, hezkuntza, esperientzia eta onartutako beste ohitura batzuk.
  • Ikasteko egokitasuna: elkarrizketa egokia da erabiltzaileari sistema erabiltzen ikasteko laguntza eta gida eskaintzen dionean.
  • Kontrolagarritasuna: elkarrizketa kontrolagarria da erabiltzaileak elkarreraginaren norabidea eta erritmoa has eta kontrola ditzakeenean, zeregina amaitu arte.
  • Akats-tolerantzia: elkarrizketa akats-tolerantea da, sarrera-akatsak egon arren, nahi den emaitza lortu daitekeenean erabiltzailearen ekintza gabe edo ekintza minimoarekin.
  • Pertsonalizagarria: elkarrizketa pertsonalizagarria da software-interfazea egokitu daitekeenean zereginaren beharretara, erabiltzailearen lehentasunetara eta gaitasunetara.

Informazioaren aurkezpenari dagokionez, aplikazioan nola antolatzen den, objektuen bistaratzea eta informazioaren kodeketa, hainbat puntu kontuan hartu behar dira:

  • Argitasuna: informazioaren edukia azkar eta zehaztasunez aurkezten da.
  • Bereizgarritasuna: bistaratutako informazioa zehaztasunez bereiz daiteke.
  • Laburtasuna: erabiltzaileak ez dira informazio garrantzitsu gabearekin gainkargatzen.
  • Koherentzia: diseinua bakarra da eta erabiltzailearen itxaropenekin bat dator.
  • Detektagarritasuna: erabiltzailearen arreta beharrezko informaziora bideratzen da.
  • Irakurgarritasuna: informazioa irakurtzeko erraza da.
  • Ulergarritasuna: esanahia argi eta garbi uler daiteke, ez da anbiguoa, interpretagarria eta ezagungarria da.

10 Bezeroaren eskakizunen bilketa

Aplikazio baten programazioa hasi aurretik, argi izan behar dugu bezeroaren eskakizunak zeintzuk diren, proiektuaren irismena zein den eta zer espero den emaitzatik.

Eskakizun hauek normalean bezeroarekin egindako elkarrizketen bidez lortzen dira, ahalik eta informazio gehien jasotzeko, eta horrela aplikazioak izan behar dituen funtzionalitateak argi geratzeko.

Proiektuaren hasieran eskakizunen bat argitu gabe geratzen bada, erabaki txarrak hartzeko kate bat sor daiteke eta horrek azken emaitzan eragina izango du. Arazoa da, kasu batzuetan, erabaki txar horiek aplikazioaren core-an txerta daitezkeela eta etorkizunean mugatu dezaketela.

Eskakizun bilketa txar batek aplikazioa gaizki garatzea eta etorkizunean mugatzea ekar dezake.

10.1 Eskakizunen lortzea

Aurrean esan bezala, eskakizunen lortzea proiektuaren hasieran egiten da, edozein programazio mota egin aurretik. Eskakizunak lortzeko ohiko moduak hauek dira:

  • Bezeroarekin elkarrizketak.
  • Aplikazioa erabiliko duten erabiltzaileekin elkarrizketak.
  • Lan-metodologiaren egungo egoera ezagutu eta aztertzea (baldin badute). Proiektua amaitzean, metodologia hori egokitu beharko da.

Era berean, garrantzitsua da analistak eta proiektuaren arduradunak bezeroaren lekuan jartzea, galdera egokiak egiteko eta zer egin nahi den ulertzeko.

10.2 Eskakizunen analisia

Bezeroaren informazioa jaso ondoren, eskakizunen analisia egin behar da; horrela, zalantzak sor daitezke eta, kasu horretan, aurreko urratsera itzuli.

Eskakizun motak bereizteak bakoitzaren irismena ulertzen lagunduko digu, aplikazioaren atal desberdinak kudeatzeko.

Eskakizunak aztertzerakoan, normalean taula bat sortzen da, non honako hauek adierazten diren:

  • Eskakizun mota.
  • Kategoria, mota desberdinen artean bereizteko.
  • Lehentasuna, lehentasunaren arabera ordenatzeko eta noiz landu behar diren jakiteko.
  • Mendekotasunak, izan ere, eskakizun batzuk beste batzuen menpe egon daitezke. Beraz, eskakizuna egin aurretik, mendekotasunak amaitu behar dira.
  • Izenburua eskakizuna laburbiltzen duen deskribapenarekin.
  • Eskakizunaren deskribapena, beharrezkoa den informazio guztia eman behar da, gero garatu ahal izateko.
  • Arrazoia eskakizunaren zergatia hobeto ulertzeko.

Eskakizunak idazterakoan, bakoitzarentzat taula bat sor dezakegu honako moduan:

ID Mota Kategoria Lehentasuna Mendekotasunak
1 Funtzionala Transakzionala Oso altua
Erabiltzaileen erregistroa
Deskribapena:
Aplikazioak erabiltzailea erregistratzeko aukera emango du, honako datuak eskatuz:
  • E-maila
  • Pasahitza
  • Izena eta abizenak (aukerakoa)
  • Jaioteguna
  • Generoa (aukerakoa)
  • Herrialdea (aukerakoa)
Arrazoia:
Errezetak erregistratu ahal izateko erabiltzailea sisteman erregistratuta egon behar da.
Datu batzuk aukerakoak dira. Jaioteguna derrigorrezkoa da, erabiltzaileak adin nagusikoak izan behar dutelako.

Kasu honetan, “Mendekotasunak” atalean ez da ezer gehitu, aplikazioaren lehen eskakizuna delako.

10.2.1 Negozio-eskakizunak

Negozio-eskakizunak teknikoenak ez direnak izaten dira, eta laburbilduz, enpresak proiektua amaitzean zer lortu nahi duen adierazten dute.

Adibide batzuk:

  • Errezeta atari bat sortzea, erabiltzaileek beren errezetak igo, baloratu eta partekatu ahal izateko.
  • Enpresaren produktuen kudeaketa hobetzeko aplikazio bat sortzea, inbentario digitala izateko eta agortu aurretik abisuak sortzeko.
  • Eskalada gustuko duten pertsonentzako sare sozial bat sortzea, ibilbideak partekatzeko, zailtasunak baloratzeko eta eskalatzeko hitzorduak egiteko.

Ikus daitekeenez, ideia orokorra da, baina garapenean kontuan hartu beharreko beste eskakizun batzuk ere ematen dizkigu.

10.2.2 Eskakizun funtzionalak

Eskakizun funtzionalak aplikazioak eskaini behar dituen zerbitzuen adierazpenak dira. Azken batean, sistemak egoera desberdinetan nola jokatuko duen definitzen dute.

Eskakizun funtzionalak honela bana daitezke:

  • Eskakizun transakzionalak
  • Datuen eskakizunak
  • Interfaze edo aurkezpen eskakizunak
  • Pertsonalizazio eskakizunak

10.2.2.1 Eskakizun transakzionalak

Eskakizun transakzionalak aplikazioak izango dituen funtzionalitateak eta erabiltzaileak aplikazioan dauden datuekin egin ahal izango dituen zereginak dira.

Eskakizun eta funtzionalitate transakzional hauetan oinarrituta, beste eskakizun batzuk sortuko dira (adibidez, datuen eskakizunak eta interfaze-eskakizunak).

Eskakizun transakzional baten adibidea aurrekoa da, erabiltzaileen erregistroa, eta beste bat izan daiteke erabiltzailearen login-a egitea.

10.2.2.2 Datuen eskakizunak

Datuen eskakizunek, izenak dioen bezala, aplikazioak erabiliko dituen datuekin dute zerikusia. Garrantzitsua da ulertzea aurreko puntuetan ateratzen diren eskakizun funtzionalek aplikazioak erabiliko dituen datuak ere beharko dituztela.

Egin den analisia ulertu behar da, zein datu erabiliko diren jakiteko, eta ondoren datu-basearen Entitate-Erlazio eskema egiteko.

Datuen eskakizunetatik abiatuta, aplikazioaren datu-basea sor dezakegu.

Adibideak:

  • Erabiltzailearen datuak: Erabiltzailea erregistratzean zein datu eskatuko diren.
  • Edukiaren datuak: Gure aplikazioa sukaldaritza-errezeten ingurukoa bada, errezeta berri bat gehitzean zein datu eskatuko diren (izena, osagaiak, zailtasuna, prestaketa-prozedura,…).

10.2.2.3 Interfaze/aurkezpen eskakizunak

Informazioa aurkeztean eta aplikazioa erabiltzean, erabiltzaileak sistemarekin elkarreragin behar du eta hori interfaze-elementu desberdinen bidez egiten da. Horregatik, beharrezkoa da interfaze-eskakizunak argi izatea, eta horietatik abiatuta nabigazio-mapa bat sortzea.

Adibideak:

  • Erabiltzailearen erregistroa: Erabiltzailea erregistratzeko panela.
  • Erabiltzailearen login-a: Login egiteko interfazea.
  • Erabiltzaile-interfazea: Erabiltzailea saioa hasita dagoenean, bere panel nagusian zer erakutsiko zaion.

10.2.2.4 Pertsonalizazio-eskakizunak

Eskakizun hauek aukerakoak izan daitezke, ez baitute aplikazio guztiek erabiltzaileentzako pertsonalizazio-sistemarik izango. Pertsonalizazioren bat egin badaiteke, atal honetan zehaztuko da.

Adibideak:

  • Aplikazioaren hizkuntza aukeratu ahal izatea.
  • Hizkuntza aldaketa automatikoki egitea.

10.2.3 Ez-funtzionalak diren eskakizunak

Ez-funtzionalak diren eskakizunak ez dira sistemak eskaintzen dituen funtzio espezifikoetara zuzenean zuzentzen. Ez-funtzionalak diren eskakizun hauek ere hainbat ataletan bana daitezke, jarraian ikusiko dugun bezala.

Ez-funtzionalak diren eskakizunak normalean alderdi teknikoak izaten dira.

10.2.3.1 Produktu-eskakizunak

Hauek dira produktuak izan behar duen portaera zehazten duten eskakizunak, eta eraginkortasunarekin, fidagarritasunarekin, erabilgarritasunarekin… lotuta egon daitezke. Normalean bezeroak ez ditu ezagutzen xehetasun teknikoak, eta, beraz, guk landu behar ditugu.

Kontuan izan behar da, kasu honetan, eskakizunak oso desberdinak izango direla egiten ari garen produktu/proiektu motaren arabera, ez baita berdina web-aplikazio bat edo mugikor-aplikazio bat.

Adibideak:

  • Web-aplikazioa urteko 365 egunetan 24x7 erabilgarri egon behar da.
  • Bertsio berriak hedatzea sistemaren bidez egingo da, akatsen bat izanez gero aldaketak atzera bota ahal izateko.
  • Mugikor-aplikazioa barne-testetan probatuko da dagokion store-ra bidali aurretik.

10.2.3.2 Antolakuntza-eskakizunak

Ez-funtzionalen artean, antolakuntza-eskakizunak ere bereiz daitezke, besteak beste:

  • Entrega-eskakizunak: Aplikazioaren sprint desberdinak eta azken bertsioa noiz entregatu behar diren.
  • Inplementazio-eskakizunak: Erabiliko den programazio-lengoaia, framework edo bertsioak, debug sistema, proiektuaren jarraipena nola egingo den, erabiliko den bertsio-kontrol sistema…
  • Estandarren erabilera: Programazio-lengoaia konpilatua bada, zein konpilatzaile eta bertsio erabiliko diren. Aldagai-izenak sortzeko zein sistema erabiliko den (camelCase, snake_case, …). Webean bada, HTML5+CSS3 erabilera…

10.2.4 Sistemaren eskakizunak

Amaitzeko, sistemaren eskakizunek proiektua non exekutatuko den adierazten dute, eta behar bezala funtzionatzeko bermatu behar ditugun baldintzak zeintzuk diren.

Berriz ere, aldeak egongo dira proiektua web-aplikazio bat edo mugikor-aplikazio bat den.

Adibideak:

  • Aplikazioak Android sistema eragileetan funtzionatu beharko du, API 30 edo berriagoarekin.
  • Mugikor-aplikazioak ez du inolako baimenik beharko erabiltzeko.
  • Web-aplikazioa AWS-n hainbat konputazio-gunetan hedatuko da.

11 Eredu kontzeptualen diseinua

Eskakizunak jaso ondoren, hauek aztertzeko eta dagokion eredu kontzeptualaren diseinua egiteko unea da. Eredu hauek izango dira programazioa hasteko oinarria.

Wikipediak dioen bezala, eredu kontzeptuala sistema baten irudikapena da, sistemaren gaia ezagutzen, ulertzen edo simulatzen laguntzeko erabiltzen diren kontzeptuen konposizioz osatua, eta bertan entitate garrantzitsuak eta haien arteko erlazioak jasotzen dira.

Eredu kontzeptual baten helburu nagusia da ordezkatzen duen sistemaren oinarrizko printzipioak eta funtzionalitatea transmititzea. Gainera, erabiltzaileek erraz uler dezaketen interpretazioa eskaini behar du.

Eredu kontzeptualek honako helburu hauek dituzte:

  1. Sistema ordezkariaren ulermen indibiduala hobetzea.
  2. Sistemaren xehetasunak interesdunen artean modu eraginkorrean transmititzea erraztea.
  3. Sistemaren diseinatzaileentzat erreferentzia-puntu bat eskaintzea, sistemaren zehaztapenak ateratzeko.
  4. Sistema dokumentatzea etorkizunerako eta lankidetzarako bide bat eskaintzea.

Eredu mota desberdinen artean, honako hauek nabarmendu daitezke:

  • Egituraren diagramak
    • Klase-diagramak
    • Datu-diagrama
    • Osagaien diagramak
    • Hedapen-diagramak (despliegue)
  • Portaera eta elkarreragin (*interacción) diagramak
    • Jarduera-diagramak
    • Erabilera-kasu diagramak
    • Egoera-diagramak
    • Sekuentzia-diagramak

Jarraian, horietako batzuk zehazten dira.

11.1 Datuen eredu kontzeptuala

Datuen eredu kontzeptuala egiteko, ohikoena da “Entitate-Erlazio eredua” erabiltzea, hau da, gero diseinu logikoa eta azkenik datu-basearen diseinu fisikoa egiteko abiapuntua. Hau beharrezkoa izango da datu-base erlazional bat behar badugu.

Datuen eredua aplikazio askoren oinarrizko zatia izaten da, beraz, eskakizunen bilketa zuzena izan behar da, eta datuen ereduaren diseinua ere bai.

Datuen ereduaren diseinu kontzeptuala, datuen eskakizunekin batera, aplikazio askoren oinarrizko zatia da.

11.2 Erabilera-kasu diagramak

Erabilera-kasu diagramak funtzionalitate bat deskribatzen dute, erabiltzaile baten eta sistemaren arteko elkarreragina konbinatuz, gertaera-sekuentzia bat osatuz.

Erabilera-kasuaren deskribapena egiten denean, zer egingo den azaltzen da, baina ez nola egingo den tekniko mailan. Adierazpen zehatzak erabili behar dira, nahasmenik ez sortzeko; horregatik, sinpletasuna eta argitasuna bilatzen dira.

Adibidez, jarraian bi adibide ikus daitezke: erabiltzaile baten erregistroa eta sisteman autentifikazioa nola irudikatu daitezkeen erabilera-kasu diagramen bidez:

Ikus daitekeenez, ekintza burutu behar denaren ikuspegi abstraktua ematen duten diagramak dira.

11.3 Nabigazio-mapa

Lortutako portaera eta elkarreragin diagramak kontuan hartuta, hurrengo urratsa aplikazioaren topologia eta funtzionalitate desberdinen arteko bideak egitea da. Lortutako emaitza aplikazioaren nabigazio-mapa izango da.

Errezeta web baten nabigazio-mapa

Aplikazio edo web baten nabigazio-mapak eduki nagusien arteko esteken ikuspegi orokor eta laburtua eman behar digu.

11.4 Prototipoak

Aurreko urratsak egiten diren bitartean, paraleloan aplikazioaren itxura eta interfaze-diseinua nolakoa izango den azter daiteke.

Lehen urratsetan, paper gaineko zirriborroak edo aplikazioetan egin daitezke, xehetasun handirik gabe, aurretik ikusitako diseinuekin batera. Zirriborro hauek aplikazioaren ideia orokorra osatzen hasten dira.

Eredu zehatzagoak eta errealitateari hurbilagoak egiteko, prototipo-sistemak erabiltzen dira, hau da, erraz handitu eta aldatu daitezkeen modeloak (irudikapenak, erakustaldiak edo simulazioak). Haien ezaugarri nagusiak hauek dira:

  • Erabiltzaile-interfazea izaten dute.
  • Sarrera/irteera eta nabigazio funtzionalitatea izan dezakete.
  • Horiek egiteko hainbat tresna daude.
  • Xehetasun maila desberdina izan dezakete.
  • Bezeroak ikusten duena ulertzeko gai da, beraz, feedback-a azkar lortzeko bide bat da.
  • Aurreko etapetan aztertu ez diren ustekabeko alderdiak ager daitezke. Beraz, eskakizunen zehaztapena hobetzen eta zehazten laguntzen du.