Angre - Undo

Angre er en interaksjonsteknikk som er implementert i mange dataprogrammer. Den sletter den siste endringen som ble gjort i dokumentet, og tilbakestiller den til en eldre tilstand. I noen mer avanserte programmer, for eksempel grafisk prosessering , angrer du den siste kommandoen til filen som redigeres. Med muligheten for å angre kan brukerne utforske og jobbe uten frykt for å gjøre feil, fordi de lett kan angres.

Forventningene for å angre er enkle å forstå: å ha en forutsigbar funksjonalitet, og å inkludere alle "angrebare" kommandoer. Angre er vanligvis tilgjengelig til brukeren angrer alle utførte operasjoner. Men det er noen handlinger som ikke er lagret i angrelisten, og dermed kan de ikke angres. Lagre fil kan for eksempel ikke angres, men står i kø i listen for å vise at den ble utført. En annen handling som vanligvis ikke er lagret, og dermed ikke kan angres, er rulling eller valg .

Det motsatte av angre er å gjøre om . Redo-kommandoen reverserer angre eller fremfører bufferen til en nyere tilstand.

De vanlige komponentene i angre funksjonalitet er kommandoene som ble utført av brukeren, historikkbufferen (e) som lagrer de fullførte handlingene, angre- / gjentarebehandleren for å kontrollere historikkbufferen, og brukergrensesnittet for samhandling med brukeren.

I de fleste Microsoft Windows- applikasjoner er hurtigtasten for angre kommando Ctrl + Z eller Alt + Backspace, og snarveien for å gjøre om igjen er Ctrl + Y eller Ctrl + Shift + Z.

I de fleste Apple Macintosh- applikasjoner er snarveien til angre kommando Command -Z, og snarveien for å gjøre om er Command - Shift -Z.

På alle plattformer kan du også få tilgang til funksjonene Angre / Gjør om via Rediger-menyen .

Historie

Evnen til å angre en operasjon på en datamaskin ble uavhengig oppfunnet flere ganger, som svar på hvordan folk brukte datamaskiner.

Den File henting og redigeringssystem , utviklet starter i 1968 ved Brown University , er rapportert å være den første databasert system for å ha hatt en "angre" -funksjonen.

Warren Teitelman utviklet en programmeringsassistent som en del av BBN-LISP med en Angre-funksjon innen 1971.

Den Xerox PARC Bravo teksteditor hadde en Angre-kommandoen i 1974. En 1976 forskningsrapport fra Lance A. Miller og John C. Thomas fra IBM , atferdsmessige problemer i bruken av interaktive systemer , bemerket at "det ville være ganske nyttig å tillate brukere å 'ta tilbake' minst den kommandoen som er rett før (ved å utstede en spesiell 'angre-kommando). " Programmererne ved Xerox PARC forskningssenter tilordnet hurtigtasten Ctrl-Z til angre kommandoen, som ble en avgjørende funksjon i tekstredigerere og tekstbehandlere i den personlige datamaskintiden . I 1980 begynte Larry Tesler fra Xerox PARC å jobbe hos Apple Computer . Der fortalte han og Bill Atkinson for tilstedeværelsen av en angre kommando som en standard inventar på Apple Lisa . Atkinson var i stand til å overbevise de enkelte utviklerne av Lisas applikasjonsprogramvare om å inkludere et enkelt nivå av angre og gjøre om, men lyktes ikke i lobbyvirksomhet for flere nivåer. Da Apple introduserte Lisas etterfølger, Macintosh , bestemte det at alle standardapplikasjoner skulle inneholde en "Angre" som den første kommandoen i "Rediger" -menyen, som har vært standarden på macOS og Windows den dag i dag.

Flere nivåer angre kommandoer ble introdusert på 1980-tallet, slik at brukerne kunne ta tilbake en rekke handlinger, ikke bare den siste. EMACS og andre tidsdelte skjermredaktører hadde det før personlig dataprogramvare. CygnusEd var den første Amiga-teksteditoren med en ubegrenset funksjon for angre / gjenta. Angre. AtariWriter , en tekstbehandlingsapplikasjon introdusert i 1982. NewWord, et annet tekstbehandlingsprogram utgitt av NewStar i 1984, hadde en unerase-kommando. IBMs VisiWord hadde også en angre kommando.

Angre og gjør om modeller

Angre modeller kan kategoriseres som lineære eller ikke-lineære. Den ikke-lineære angre-modellen kan underklassifiseres i skriptmodell, US & R-modell, triadisk modell og selektiv angre.

Noen vanlige egenskaper ved modeller er:

  • stabil utførelsesegenskap: En stat er representert som en ordnet liste over kommandoer. Dette betyr at en kommando "alltid angres i tilstanden som ble nådd etter den opprinnelige utførelsen."
  • svekket stabil utførelse: Dette betyr at hvis angre utføres, blir alle kommandoer som er avhengige av angret kommando angret avhengig av kommandoen.
  • stabilt resultategenskap: Denne egenskapen har den samme betydningen som den stabile kjøringsegenskapen bortsett fra listen. Den ordnede listen over kommandoer inkluderer at de ble utført i stedet for bare kommandoene.
  • kommutativ: Det betyr at den nådde tilstanden etter å angre og gjøre om to forskjellige kommandoer er den samme når de kjøres i omvendt rekkefølge.
  • minimalistisk angreegenskap: Den beskriver at "angre drift av kommando C angrer bare kommando C og alle kommandoer yngre enn C som er avhengige av C."

Lineær angre

Lineær angre er implementert med en stabel (siste inn først ut (LIFO) datastruktur) som lagrer en historie med alle utførte kommandoer. Når en ny kommando kjøres, blir den lagt til øverst i bunken. Derfor er det bare den sist utførte kommandoen som kan angres og fjernes fra historikken. Angre kan gjentas så lenge historikken ikke er tom.

Begrenset lineær modell

Den begrensede lineære modellen er en forstørrelse av den lineære angre-modellen. Den tilfredsstiller den ovenfor beskrevne stabile kjøringsegenskapen for lineær angre, fordi denne modellen ikke beholder egenskapen hvis en kommando utføres mens historikklisten inneholder andre kommandoer. Den begrensede lineære modellen tømmer historielisten før en ny kommando legges til. Men andre begrensninger er også tilgjengelige. For eksempel kan størrelsen på historielisten være begrenset, eller når en definert størrelse er nådd, blir den første utførte kommandoen slettet fra listen.

Ikke-lineær angre

Hovedforskjellen mellom lineær angre og ikke-lineær angre er brukerens mulighet til å angre de utførte kommandoene i en vilkårlig rekkefølge. De har sjansen til å angre ikke den siste kommandoen, men heller velge en kommando fra listen. For ikke-lineær modell er det underklasser som implementerer denne modellen.

Skriptmodell

Skriptmodellen håndterer brukerhandlinger som redigering av et kommandoskript. Historikklisten over de utførte kommandoene tolkes "som et skript, effekten av en angre er definert til å være den samme som om den angrede handlingen aldri hadde skjedd i utgangspunktet." Som et resultat av angre, må staten være slik som om den angrede kommandoen aldri ble utført. En ulempe ved denne modellen er at brukeren må kjenne sammenhengen mellom angret kommando og den nåværende tilstanden for å unngå bivirkninger. Ett av dette kan være for eksempel duplisering. Andre problemer er at hvis "påfølgende kommandoer gjøres om i en annen tilstand som de opprinnelig ble utført i direkte manipulasjonsgrensesnitt, er ikke denne fortolkningen av den opprinnelige brukerhandlingen alltid åpenbar eller veldefinert".

US & R-modell

Det spesielle ved denne modellen er at den har muligheten til å hoppe over en kommando. Dette betyr at omlegging av en kommando kan hoppes over. Kommandoen som hoppes over er merket som hoppet over, men ikke slettet. Når nye kommandoer kjøres, beholdes historikklisten, slik at rekkefølgen på de utførte kommandoene kan reproduseres med det. Rekkefølgen kan beskrives gjennom et historiktre som er en rettet graf, "fordi det er mulig å fortsette å gjøre om kommandoer fra en annen gren og skape en lenke i grafen". Selv om settet med kommandoer er enkelt og lett å forstå, er den komplekse strukturen med å hoppe over og koble sammen grener vanskelig å forstå og huske når brukeren vil angre mer enn ett trinn.

Triadisk modell

Denne ikke-lineære angremodellen har i tillegg muligheten for å rotere. Den har den samme datastrukturen som de ovennevnte modellene med en historikkliste og en atskilt gjentagelsesliste som inkluderer omgjøringsoperasjonene. Rotasjonsoperasjonen setter den siste kommandoen i omlistingslisten foran den. På den ene siden betyr dette at neste kommando som skal gjøres om kan velges ved å plassere den foran. På den annen side kan rotasjon brukes "for å velge stedet i gjenta listen der neste angreoperasjon vil sette kommandoen". Listen over omgjør er derfor ikke ordnet. "For å angre en isolert kommando, må brukeren angre et antall trinn, rotere omlisten og deretter gjøre om et antall trinn". For å gjøre om, må listen roteres til ønsket kommando er over.

Selektiv angre

Jakubec et al. si at selektiv angre er en funksjon som en modell kan tilby, men for selektiv angre er det ingen klar definisjon. Forfatterne valgte funksjoner som en modell skal ha når den støtter selektiv angre. Det skal være mulig å "angre utført handling i historikkbufferen. Handlinger uavhengig av handlingen som skal angres, bør stå urørt". Akkurat som omgjøring må være mulig for enhver angre kommando. Den tredje funksjonen for selektiv angre er at "ingen kommando kan automatisk kastes fra historikkbufferen uten direkte brukeres forespørsel." For selektiv angre gjelder at angre og gjenta kan kjøres utenfor enhver sammenheng. Det er tre hovedspørsmål. Den første er at angrede kommandoer kan være utenfor den opprinnelige konteksten. Gjennom dette kan det være døde referanser som må håndteres. Det andre problemet med at modifiserte kommandoer kan angres, og det må derfor løses hvilken tilstand etter angre som blir presentert. Det tredje problemet er å forkaste kommandoproblemer. Selektiv angre har ingen peker i listene, så dette betyr at ingen kommando skal kastes fra bunken.

Direkte selektiv angre

Direkte selektiv angre er en utvidelse av begrenset lineær angre med et historietre. Operasjonen oppretter en kopi av den valgte kommandoen, utfører denne og legger den til historikklisten. Der defineres to ikke-lineære operasjoner som selektiv angre og selektiv gjenta, så det er mer symmetrisk.

Flerbrukerapplikasjon

Når flere brukere kan redigere det samme dokumentet samtidig, er det nødvendig å angre flere brukere. Global multibruker-angre tilbaketrekker den siste handlingen som ble gjort i dokumentet, uavhengig av hvem som utførte redigeringen. Lokal flerbruker angre bare tilbakekaller handlinger utført av den lokale brukeren, noe som krever en ikke-lineær angreimplementering.

Der angre kan brukes til å spore gjennom flere redigeringer, går kommandoen om å gjøre fremover gjennom handlingshistorikken. Når du foretar en ny redigering, tømmes gjentakelseslisten. Hvis en forgrening redo modellen er brukt, de nye redigere grener handlingen historie.

Antall tidligere handlinger som kan angres, varierer etter program-, versjons- og maskinvare- eller programvarefunksjoner. For eksempel er standard angre / gjenta stabelstørrelse i Adobe Photoshop 20, men kan endres av brukeren. Som et annet eksempel tillot tidligere versjoner av Microsoft Paint bare å oppheve opptil tre redigeringer; versjonen introdusert i Windows 7 økte denne grensen til 50.

Simplistiske, enkeltredigerende angrefunksjoner gjør noen ganger "gjenta" ved å behandle selve angre kommandoen som en handling som kan angres. Dette er kjent som flip angre-modellen, fordi brukeren kan bla mellom to programtilstander ved hjelp av angre-kommandoen. Dette var standardmodellen før den utbredte adopsjonen av angrep på flere nivåer på begynnelsen av 1990-tallet.

Angre implementeringen

Angre kan implementeres gjennom forskjellige mønstre. De vanligste mønstrene er kommandomønster og minner .

Kommandomønster

Den kommando mønsteret er et designmønster som omslutter informasjon fra drift til kommandoobjekter. Dette betyr at hver handling er lagret i et objekt. Den abstrakte kommandoklassen implementerer en abstrakt utføringsoperasjon, slik at hvert kommandoobjekt har en utføringsoperasjon. For å angre, må det også være uutført operasjon, som angir effekten av den utførte kommandoen, som er lagret i en historikkliste. Angre og gjøre om er implementert slik at listen kjøres fremover og bakover når kommandoen utføre eller ikke utføre kalles.

For enkelt angre er bare den utførte kommandoen lagret. I motsetning til flernivå angre hvor ikke bare historikklisten med kommandoene er lagret, men også antall angre nivåer kan bestemmes av den maksimale lengden på listen.

Minne mønster

Med et minnemønster lagres den indre tilstanden til et objekt. Objektet der staten er frelst, kalles memento og er organisert gjennom memento-opphavsmannen. Dette returnerer et minne som er initialisert med informasjon om gjeldende tilstand når angre utføres, slik at staten kan kontrolleres. Minneriet er bare synlig for opphavsmannen.

I minner om mønster kalles angremekanismen vaktmester. Det er ansvarlig for oppbevaring av minner, men endre aldri innholdet i disse. For å angre, ber vaktmesteren om et minnesmerke fra opphavsmannen og deretter angre.

Det meste av angremekanismen kan implementeres uten avhengighet av spesifikke applikasjoner eller kommandoklasser. Dette inkluderer "administrasjon av historikklisten, historikkrulleren, menyoppføringer for å angre og gjøre om og oppdatere menyoppføringene avhengig av navnet på neste tilgjengelige kommando."

Hver kommandoklasse har en gjøremetode som kalles når en kommando utføres. Angre-metoden implementerer den omvendte operasjonen av gjør-metoden. For å implementere det motsatte er det flere forskjellige strategier.

  • full kontrollpunkt : Det betyr at hele tilstanden lagres etter at en kommando er utført. Dette er den enkleste implementeringen, men er ikke veldig effektiv og brukes derfor ikke ofte.
  • fullstendig kjøring: Derfor blir den opprinnelige tilstanden lagret, og hver tilstand i historielisten kan nås gjennom "å starte med starttilstanden og gjøre om alle kommandoer fra begynnelsen av historien."
  • delvis sjekkpunkt : Dette er den mest brukte strategien. Den endrede applikasjonstilstanden lagres og med angre settes delen av staten tilbake til fremoververdien.
  • invers funksjon: Invers funksjon trenger ingen lagret tilstandsinformasjon. "For eksempel kan flytting reverseres ved å flytte objektet tilbake med relativt mye." For selektiv angre er det ikke nok informasjon til å redde staten.

Se også

Referanser

  1. ^ a b c d e f g h i j k l m n Berlage, Thomas (1994-09-01). "En selektiv angremekanisme for grafiske brukergrensesnitt basert på kommandoobjekter". ACM-transaksjoner på datamaskin-menneskelig interaksjon . 1 (3): 269–294. doi : 10.1145 / 196699.196721 . ISSN  1073-0516 .
  2. ^ Myers, Brad A .; Kosbie, David S. (1996-04-13). Gjenbrukbare hierarkiske kommandoobjekter . ACM. s.  260–267 . doi : 10.1145 / 238386.238526 . ISBN 0897917774.
  3. ^ a b c d e f g h Jakubec, Karel; Polák, Marek; Nečaský, Martin; Holubová, Irena (2014). "Angre / gjøre om operasjoner i komplekse omgivelser" . Procedia Informatikk . 32 : 561–570. doi : 10.1016 / j.procs.2014.05.461 . ISSN  1877-0509 .
  4. ^ Moran, Chuktropolis Welling (01-01-2013). Interaktiv tid (Ph.D.). La Jolla: University of California, San Diego. ISBN 9781303194450.
  5. ^ Barnet, Belinda (2014-12-01). Memory Machines: The Evolution of Hypertext . Anthem Press. s. 108. ISBN 9781783083442. Men den mest populære utviklingen for nybegynnere i FRESS var ikke kapasiteten til å imøtekomme flere skjermer og brukere; det var 'angre' -funksjonen - funksjonen som van Dam er mest stolt av (van Dam 2011). FRESS var banebrytende for å angre på ett nivå både for tekstbehandling og hypertekst. Hver redigering av en fil ble lagret i en skyggeversjon av datastrukturen, som tillot både en 'automatisk lagring' og en angre. Brune ansatte og studenter forsto straks viktigheten og nytten av denne funksjonen (van Dam 1999).
  6. ^ Barnet, Belinda (2010-01-01). "Utforming av det brukersentrerte dokumentgrensesnittet: Hypertext Editing System (HES) og File Retrieval and Editing System (FRESS)" . 4 (1). Sitatjournal krever |journal=( hjelp )
  7. ^ Teitelman, Warren (1972-01-01). "Automatisert programmering: Programmeringsassistenten". Forhandlingene fra 5. til 7. desember 1972, Fall Joint Computer Conference, del II . AFIPS '72 (Fall, del II). New York, NY, USA: ACM: 917–921. doi : 10.1145 / 1480083.1480119 .
  8. ^ "Bravo Manual i Alto Guide for ikke-programmerere, s. 52" (PDF) . Hentet 29.03.2014 .
  9. ^ Miller, Lance A .; Thomas, John C. (1977-09-01). "Atferdsproblemer i bruk av interaktive systemer". International Journal of Man-Machine Studies . 9 (5): 509–536. doi : 10.1016 / S0020-7373 (77) 80002-3 . ISSN  0020-7373 .
  10. ^ Miller, Lance A .; John C. Thomas Jr. (desember 1976). "Behavioral Issues in the Use of Interactive Systems" (PDF) . Hentet 2011-05-21 . Sitatjournal krever |journal=( hjelp )
  11. ^ a b c Ben Zimmer (2009-09-15). "Age of Undoing" . New York Times . Hentet 02.06.2013 .
  12. ^ Apple Computer, Inc. (1984). "Brukergrensesnitt". Inne Macintosh, Volume I .
  13. ^ Roberta Mancini, Alan Dix og Stefano Levialdi. 2006. "Reflections on Ango"
  14. ^ a b c Designmønstre: elementer av gjenbrukbar objektorientert programvare . Gamma, Erich. Lesing, messe: Addison-Wesley. 1995. ISBN 0201633612. OCLC  31171684 .CS1 maint: andre ( lenke )

Eksterne linker

  • The Age of Undoing - Artikkel om den språklige historien om Angre på The New York Times Magazine.
  • Cascading angre kontroll - et papir fokusert på hva som er cascading angre og hvordan det kan presenteres for brukerne