Moduļa 1.4. vingrinājumi

exercise11: Tekstveida datu apstrāde

Mērķis

  • Izveidot vienkāršu aplikāciju, kura no faila "in.html" nolasītos baitus pārveido ar aritmētiskiem un bitu operatoriem un raksta atbilstoši failos "out1" un "out2".
  • Abi pārveidojumi ir variācijas par t.s. Cēzara šifra tēmu. Iedomāsimies, ka mēs gribam ar maksimāli vienkāršu manipulāciju padarīt glītu ASCII failu nesalasāmu. Vienkāršākais paņēmiens ir katru baitu aizstāt ar citu baitu pēc noteikta algoritma. Mēs lietosim divus dažādus algoritmus:
  • Visus baitus "izrakstām pa apli" (t.i. aiz baita 255 seko atkal baits 0). Katru baitu aizstājam ar citu baitu, kurš ir 128 pozīcijas tālāk pa apli. Šī operācija ir izsakāma ar pieskaitīšanu un % - atlikuma operāciju
  • Aplūkojam bitus katrā baitā atsevišķi. Šos bitus iespējams rotēt - t.i. samaisīt vietām tā, lai 1. bits aizceļotu uz 5. pozīciju, 2. uz 6., 3. uz 7., 4. uz 8., 5. uz 1., utt. Šo operāciju var izteikt ar kreiso un labo nobīdi un XOR - bitveida izslēdzošo VAI.

Darbības

  • Uzinstalēt "Eclipse" - integrēto Java izstrādes vidi (JDeveloper un citu rīku lietotājiem arī būtu vēlams iepazīties ar Eclipse; šīs vides lietošanu īpaši ieteica Uģis)
  • Izmantot klases izejas kodu, kurš pagaidām vienkārši kopē vienu failu divos citos failos. Šīs klases izejas kods dots failā exercise11/Encode.java. Par testa datiem var lietot doto Majakovska dzejoli in.html.
  • Pārveidot divas pārkodēšanas funkcijas, kuras saņem un atgriež baitu masīvu. Visas nepieciešamās baitu pārveidošanas darbības varat veikt tajā pašā baitu masīvā, kurš ir saņemts kā arguments. Masīva buffer garumu programmā nosaka šādi: buffer.length.
  • Pārliecināties, ka pēc "iekodēšanas" abus failus var arī atkodēt. Piemēram, ja "out1" ieliek "in.html" vietā, tad iegūtais "out1" atkal ir sākotnējais Majakovska dzejolis.

exercise12: Lietotāji un direktorijas

Objektu diagramma

Mērķis:

  • Pēc dotās klašu diagrammas izveidot aplikāciju, kurā ir klases User un Directory. Lietotājam pieder 0 vai 1 direktorija, kurā tas pievieno un dzēš failus. (Šis nav mēģinājums replicēt operētājsistēmas darbību, bet gan aprakstīt tādu Satura Pārvaldības modeli, kurš turpmākajos projekta soļos varētu arī atšķirties no tās, kuru piedāvā tipiskas failu sistēmas.)
  • Klasē User visu metožu uzvedība ir triviāla - tās atgriež vai uzstāda attiecīgos privātos atribūtus. Konstruktors izveido jaunu User instanci bez savas direktorijas (t.i. directory==null) ar norādīto vārdu un uzvārdu.
  • Klasē Directory konstruktors izveido direktoriju ar norādīto atmiņas limitu un izlietoto atmiņu vienādu ar 0. Abas "getXxx()" metodes ir triviālas.
  • Metode addFile() rīkojas sekojoši:
    • pārbauda, vai norādītais faila vārds nav null vai arī tukšs
    • pārbauda, vai faila izmērs ir lielāks par 0
    • pārbauda, vai netiek pārsniegts atmiņas limits, t.i. vai, pieskaitot jau izmantotajai atmiņai jauno failu viss ir labi
    • sameklē masīvā files brīvu vietu (files[i]==null), un noskaidro, vai fails ar norādīto vārdu jau neeksistē
    • uzkonstruē failu ar norādīto vārdu un izmēru, un ievieto brīvajā vietā masīvā

    Ja kaut viena no augšminētajām darbībām nenotiek sekmīgi, metode atgriež "false" un atstāj direktoriju bez izmaiņām. Pretējā gadījumā metode pievieno jauno failu un atgriež "true".

  • Metode removeFile() mēģina atrast failu ar norādīto nosaukumu. Ja tas izdodas, failu izmet (t.i. files[i] piešķir null, samazina izmantoto atmiņu un atgriež "true"). Ja faila nav, atgriež "false"
  • Klase File ir triviāla - tās konstruktors uzstāda abus privātos mainīgos, bet getXxx() metodes tos atgriež
  • Izlabot TestCMS.java kļūdas (ja tādas ir) un palaist aplikāciju ar ieejas punktu TestCMS.main().