1 / 77

RP3/predavanje08

RP3/predavanje08. Tokovi Atributi Asembliji, moduli Kompiliranje, povezivanje. Datoteke, direktoriji. Klase za rad s datotekama i direktorijima nalaze se u System.IO prostoru: File – sadrži statičke metode za rad s datotekama. FileInfo – sve metode rade s instancama.

chava
Télécharger la présentation

RP3/predavanje08

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. RP3/predavanje08 • Tokovi • Atributi • Asembliji, moduli • Kompiliranje, povezivanje ---------- Računarski praktikum 3 ---------- Maja Starčević

  2. Datoteke, direktoriji Klase za rad s datotekama i direktorijima nalaze se u System.IO prostoru: File – sadrži statičke metode za rad s datotekama. FileInfo – sve metode rade s instancama. Directory – sadrži statičke metode za kreiranje, premještanje i pretraživanje direktorija. FileSystemInfo – sadrži svojstva i metode koje pružaju informacije o datoteci ili direktoriju. DirectoryInfo – sadrži samo instantne članove (izvedena iz klase FileSystemInfo ). Računarski praktikum 3

  3. Datoteke, direktoriji Statičke metode u File klasi: Računarski praktikum 3

  4. Datoteke, direktoriji Računarski praktikum 3

  5. Datoteke, direktoriji Računarski praktikum 3

  6. Datoteke, direktoriji using System.IO; ........... DirectoryInfo dir = new DirectoryInfo(@"C:\test"); DirectoryInfo subDir1 = dir.CreateSubdirectory(“movies"); DirectoryInfo subDir2 = dir.CreateSubdirectory(“music"); DirectoryInfo subSubDir2 = subDir2.CreateSubdirectory(“mp3"); subdir2.Delete(false); error subdir2.Delete(true); Računarski praktikum 3

  7. Datoteke, direktoriji using System; using System.IO; class Program { static int dirCounter =1; static int indent=-1; static void Main(string[] args) { DirectoryInfo dir = new DirectoryInfo(@"C:\test"); DirectoryInfo subDir1 = dir.CreateSubdirectory("movies"); DirectoryInfo subDir2 = dir.CreateSubdirectory("music"); DirectoryInfo subSubDir11 = subDir1.CreateSubdirectory("movies0809"); DirectoryInfo subSubDir12 = subDir1.CreateSubdirectory("movies0910"); DirectoryInfo subSubDir21 = subDir2.CreateSubdirectory("music0708"); DirectoryInfo subSubDir22= subDir2.CreateSubdirectory("music0809"); DirectoryInfo subSubDir23 = subDir2.CreateSubdirectory("music0910"); Računarski praktikum 3

  8. Datoteke, direktoriji Program p=new Program(); p.ExploreDirectory(dir); } private void ExploreDirectory(DirectoryInfo dir) { indent++; for (int i = 0; i < indent; i++) Console.Write(" "); Console.WriteLine("[{0}] {1} [{2}]\n", indent, dir.Name, dir.LastAccessTime); DirectoryInfo[] directories = dir.GetDirectories(); foreach (DirectoryInfo d in directories) { dirCounter++; ExploreDirectory(d); } indent--; } } Računarski praktikum 3

  9. Datoteke, direktoriji using System; using System.IO; class Program { static void Main(string[] args) { DirectoryInfo dir=new DirectoryInfo(@"C:\test\music"); FileInfo[] filesInDir = dir.GetFiles(); foreach (FileInfo file in filesInDir) { Console.WriteLine(file.FullName); } } } Računarski praktikum 3

  10. Tekstualne datoteke Ako datoteka sadrži samo tekst, za čitanje i pisanje mogu se koristiti StreamReader i StreamWriter klase. static void Main(string[] args) { FileInfo sourceFile = new FileInfo(@"C:\test\tekst.txt"); StreamReader reader = sourceFile.OpenText(); StreamWriter writer = new StreamWriter(@"C:\test\tekst1.txt", false); string text; do { text=reader.ReadLine(); writer.WriteLine(text); Console.WriteLine(text); } while (text!=null); reader.Close(); writer.Close(); } Briše sadržaj datoteke tekst1.txt prije upisivanja (dodaje tekst na postojeći u slučaju opcije true) Računarski praktikum 3

  11. Binarne datoteke Ako datoteka nije tekstualna (ili nismo sigurni da je), koristi se tok bajtova (binary file). Za binarno čitanje potrebno je stvoriti dva Stream objekta, jedan za čitanje, jedan za pisanje, npr. Stream inputStream = File.OpenRead(@"C:\test\tekst.txt"); Stream outputStream = File.OpenWrite(@"C:\test\tekst1.txt); Binarno čitanje radi pomoću buffer-a (polje bajtova). System.IO.Stream sadrži metodu: public abstract int Read(byte[] buffer, int offset, int count) Računarski praktikum 3

  12. Binarne datoteke Metoda čita niz bajtova (duljine count) iz toka i pomiče poziciju u toku za broj pročitanih bajtova. Na izlazu iz metode buffer sadrži pročitano polje bajtova na poziciji od offset do offset+count-1. Metoda vraća ukupan broj bajtova učitanih u buffer: Računarski praktikum 3

  13. Binarne datoteke class Program { const int SizeBuff = 1024; static void Main(string[] args) { Stream inputStream = File.OpenRead(@"C:\test\tekst.txt"); Stream outputStream = File.OpenWrite(@"C:\test\tekst2.txt"); byte[] buffer = new Byte[SizeBuff]; int bytesRead; while ((bytesRead = inputStream.Read (buffer, 0, SizeBuff))>0) { outputStream.Write(buffer, 0, bytesRead); } inputStream.Close(); outputStream.Close(); } } Računarski praktikum 3

  14. Binarne datoteke U slučaju čitanja većih datoteka, preporučljivo je koristiti klasu BufferedStream. BufferedStream objekt stvara unutarnji buffer koji puni zadani buffer sa zadanim brojem bajtova, ali na način za koji procijeni da je najefikasniji (ponekad čitajući veće, a ponekad manje količine bajtova). Računarski praktikum 3

  15. Binarne datoteke class Program { const int SizeBuff = 1024; static void Main(string[] args) { Stream inputStream = File.OpenRead(@"C:\test\tekst.txt"); Stream outputStream = File.OpenWrite(@"C:\test\tekst1.txt"); byte[] buffer = new Byte[SizeBuff]; int bytesRead; Računarski praktikum 3

  16. Binarne datoteke BufferedStream bufferedInput = new BufferedStream(inputStream); BufferedStream bufferedOutput = new BufferedStream(outputStream); while ((bytesRead = bufferedInput.Read (buffer, 0, SizeBuff))>0) { bufferedOutput.Write(buffer, 0, bytesRead); } bufferedOutput.Flush(); bufferedInput.Close(); bufferedOutput.Close(); } } Računarski praktikum 3

  17. Atributi .NET aplikacija sadrži kod, podatke i metapodatke. Metapodaci su informacije o tipovima, kodu, asemblijima i sl. koje se pohranjuju uz program. Atributi su mehanizam za pridruživanje metapodataka. Atribut je objekt koji predstavlja podatke koji se žele pridružiti nekom elementu programa (ciljnom elementu atributa). Neki atributi su sastavni dio CLR-a ili Framework-a, ostale stvara sam korisnik. Računarski praktikum 3

  18. Atributi Ciljni element atributa može biti asembli, klasa, konstruktor, delegat, enumeracija, događaj, polje, sučelje, metoda, modul, svojstvo, struktura, parametar, povratna vrijednost, drugi atribut. Neki atributi se mogu primijeniti na bilo koji od prethodno navedenih elemenata programa. Svi mogući ciljevi atributa se nalaze u enumeraciji AttributeTargets. Računarski praktikum 3

  19. Atributi Atributi se primjenjuju tako da se stave u uglate zagrade neposredno prije ciljnog elementa. Iznimka su asembliji kad se pripadni atribut postavlja na početak koda (ali iza svih using naredbi). U slučaju da se više atributa primjenjuje na isti element, navode se u posebnim zagradama ili odvajaju zarezom. Primjer 1: [assembly: AssemblyDelaySign(false)] [assembly: AssemblyKeyFile(“.\\keyFile.snk”)] ili [assembly: AssemblyDelaySign(false), assembly: AssemblyKeyFile(“.\\keyFile.snk”)] Računarski praktikum 3

  20. Atributi Primjer 2: [Serializable, Obsolete, CLSCompliant(false)] public class ImeKlase { ... } ili [Serializable] [Obsolete] [CLSCompliant(false)] public class ImeKlase { ... } ili [Serializable, Obsolete] [CLSCompliant(false)] public class ImeKlase { ... } Računarski praktikum 3

  21. Atributi Ako se navede atribut CLSCompliant, kompilator će prijaviti upozorenje za kod koji nije u skladu s CLS-om: [assembly: CLSCompliant(true)]...... public class C { public uint Metoda( ) { … } } // upozorenje: uint nije CLS tip Računarski praktikum 3

  22. Atributi Primjer: [Obsolete(“Class A is obsolete; use class B instead")] class A { public void f() {} } class B { public void f() {} } class Test { static void Main() { A a = new A(); a.f(); } } Označava elemente programa koji se više ne koriste. //upozorenje ‘Class A is obsolete; use class B instead’ Računarski praktikum 3

  23. Atributi Modifikatorexternse koristi pri deklaraciji vanjske metode, odnosno kod korištenja Interop-servisa pri pozivu neupravljanog koda. Pritom se koristi atribut DllImport. Metoda pritom mora biti deklarirana kao statička. Računarski praktikum 3

  24. Atributi using System; using System.Runtime.InteropServices; class MainClass { [DllImport("User32.dll")] public static extern int MessageBox(int h, string m, string c, int type); static int Main() { return MessageBox(0, "using extern method", "", 0); } } Računarski praktikum 3

  25. Atributi Da bi se kreiraonovi atribut, treba napraviti izvedenu klasu iz klase System.Attribute. Također treba navesti ciljne elemente atributa. Za to se koristi atribut AttributeUsage. [AttributeUsage(AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property , AllowMultiple = true)] Računarski praktikum 3

  26. Atributi AttributeUsage je atribut koji se primjenjuje na atribute (meta-atribut). Prima dva argumenta: • prvi određuje skup elemenata na koje će se moći primijeniti atribut • drugi argument pokazuje može li se na elemente primijeniti više atributa tog tipa Računarski praktikum 3

  27. Atributi using System; [AttributeUsage(AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property , AllowMultiple = true)] public class BugFixAttribute : System.Attribute { public BugFixAttribute (int bugID, string programmer, string date) { this.bugID=bugID; this.programmer=programmer; this.date=date; } Računarski praktikum 3

  28. Atributi public int BugID { get {return BugID;} set {BugID=value;} } public string Date { get {return Date;} set {Date=value;} } public string Programmer { get {return Programmer;} set {Programmer=value;} } public string Comment { get {return Comment;} set {Comment=value;} } private int bugID; private string programmer, comment, date; } Računarski praktikum 3

  29. Atributi public class Calculus { [BugFixAttribute(145, "Luka Lukic", "30/03/10”)] public int Func1(int x) { return x + 3; } [BugFix(149, "Luka Lukic", "05/04/11", Comment = "Fixed error")] public int Func2(int x) { return x * 5; } } Računarski praktikum 3

  30. Atributi public class Test { static int Main() { Calculus calc=new Calculus(); Console.Write(calc.Func1(2)); return 0; } } } Računarski praktikum 3

  31. Atributi Comment je imenovani parametar. Imenovani parametri su polja koja nisu readonly, statička ni konstantna ili su to read-write svojstva koja su javna i nisu statička. Ostali parametri se zovu pozicijski. Pozicijski parametri se navode prije imenovanih. Imenovani se mogu navesti u bilo kojem poretku. Za takve parametre nije potrebno specificirati vrijednosti. Računarski praktikum 3

  32. Atributi Prethodni atribut ne utječe na output, nema greške ni upozorenja, već su dodani metapodaci (mogu se vidjeti pomoću Ildasm.exe) Računarski praktikum 3

  33. Asembliji Asembliji su CLI logičke jedinice funkcionalnosti, tj. osnovni blokovi jedne .NET Framework aplikacije. Primjer: pri stvaranju jednostavne C# aplikacije Visual Studio kreira asembli u obliku jedne PE (Portable Executable) datoteke (preciznije .dll ili .exe). Asembli je osnovna jedinica pri učitavanju aplikacije - učitavaju se samo asembliji koji su potrebni. Računarski praktikum 3

  34. Asembliji Asembliji se mogu sastojati od jedne ili više datoteka. Svaka od tih datoteka može biti .dll ili .exe datoteka, modul, resursna datoteka ili datoteka s manifestom. PE datoteka može sadržavati manifest, tipske metapodatke, IL kod i /ili resurse. U asembliju koji se sastoji od jedne datoteke (.dll ili .exe) manifest je uključen u tu datoteku. Kod asemblija s više PE datoteka, manifest može biti u posebnoj datoteci ili uključen u jednu od PE datoteka. Računarski praktikum 3

  35. Asembliji Postoje dva tipa asemblija • Procesni asembliji (.exe) • Biblioteke (Library) (.dll) Svaki asembli može imati samo jednu ulaznu točku (Main, DllMainiliWinMain). Računarski praktikum 3

  36. Asembliji Asembliji sadrže djelomično kompiliran kod (IL upravljani kod) koji će CLR JIT tijekom izvršavanja prevesti u matični strojni kod. Asembli sadrži informacije koje su potrebne izvršnoj okolini da bi pronašla, učitala i izvršila aplikaciju. IL kod neće biti izvršen ako pripadni asembli koji je učitan nema pridružen manifest. Računarski praktikum 3

  37. Asembliji Statički asembli može sadržavati četiri osnovna dijela. To su: • Manifest koji sadrži metapodatke asemblija • Tipski metapodaci • MSIL (IL) kod koji implementira te tipove. • Skup resursa Jedini nužan dio je manifest. Računarski praktikum 3

  38. Asembliji Grupiranje elemenata u asembliju se može napraviti na više načina, tj. pomoću jedne ili više datoteka. Primjer (asembliji sa samo jednom datotekom (.dll ili .exe)): asembli.exe Manifest asembli.dll Manifest Tipski metapodaci Tipski metapodaci ili IL kod IL kod Resursi Računarski praktikum 3

  39. Asembliji FILE2: pictures.recources Resursi FILE1:asembli.exe Manifest Tipski metapodaci IL kod FILE3: modul.netmodule Tipski metapodaci Resursi IL kod Assembly 1 Računarski praktikum 3

  40. Asembliji Za file system, datoteke koje čine asembli s više datoteka nisu fizički povezane.One su povezane preko manifesta asemblija koji ih sadrži. Zbog manifesta CLR ih tretira kao cjelinu. Kroz manifest asemblija ostvaruje se veza s modulima, resursima i ostalim datotekama asemblija. Statički asembliji pohranjuju se na disk u PE formatu. Dinamički asembliji se ne pohranjuju na disk prije izvršavanja, ali se mogu spremiti nakon izvršavanja. Računarski praktikum 3

  41. Opcije kompiliranja Kako napraviti biblioteku klasa: Visual Studio: Project -- >project’s Properties -- >Application Output type property: • Windows Application • Console Application • Class Library Računarski praktikum 3

  42. Opcije kompiliranja • csc /target:library myCode.cs • csc /out:myCodeLibrary.dll /t:library myCode.cs Opcija /target:exekoristi se za kreiranje konzolne aplikacije. Ako nije drugačije specificirano s /out opcijom, izlazna datoteka dobiva ime po ulaznoj datoteci koja sadrži Main metodu. Za stvaranje .exe datoteke potrebna je točno jednaMain metoda u ulaznom kodu. Ako postoji više klasa s Main metodom, koristi se opcija /main za raspoznavanje “prave” Main metode. Računarski praktikum 3

  43. Opcije kompiliranja Ulazna točka u .exe mora imati ime Main. Sljedeće implementacije su dozvoljene: • static void Main() { } • static void Main(string[] args) { } • static int Main() { return 0; } • static int Main(string[] args) { return 0; } Računarski praktikum 3

  44. Ime asemblija Ime asemblija sastoji se od četiri dijela: Kratko ime – odgovara nazivu PE filea (bez ekstenzije). Kultura - biblioteke i procesni asembliji u pravilunemaju kulturu. Navodi se samo za satelitske asemblije. (Primjer: "MS_409“ za American English.) Verzija – dotirani broj s četiri vrijednosti ( major, minor, build, revision). Javni ključ - za asembli s potpisom se kaže da imastrogo ime (strong name). Računarski praktikum 3

  45. Manifest Manifest se može nalaziti u vlastitoj PE datoteci ili u glavnoj datoteci (.dll ili .exe) s drugim elementima asemblija. Manifest sadrži sljedeće podatke o asembliju: Računarski praktikum 3

  46. Asembliji Svi asembliji sadrže manifest. File1.dll File2.dll Graphic.jpg Logo.bmp Manifest Manifest Assembly 2 Assembly 3 Računarski praktikum 3

  47. Ime asemblija Javni ključ služi tome da ime asemblija bude jedinstveno. Dva asemblija sa strogim imenom mogu imati isto PE ime, ali ih .NET prepoznaje kao dva različita asemblija. Windows file system (FAT32 i NTFS) prepoznaje samoimePE datoteke, tako da dva asemblija s istim nazivom PE datoteke (ali različitom kulturom, verzijom ili javnim ključem) ne mogu koegzistirati u istom Windows direktoriju. Da bi se riješio taj problem .NET uvodi GAC (Global Assembly Cache) kojeg .NET CLR tretira kao direktorij, ali se u biti radi o ugniježdenim NTFS1 ili FAT32 direktorijima. Računarski praktikum 3

  48. GAC Kad se asembliji žele dijeliti između aplikacija, stavljaju se u Global Assembly Cache. Da bi se asembli smjestio u GAC mora imati strogo ime. Asembli mora imati datoteku s istim imenom kao i asembli. Asembli se može smjestiti u GAC pomoću Microsoft Windows Installer ili Gacutil.exe. Primjer: instaliranje asemblija hello.dll u GAC: gacutil -i hello.dll Računarski praktikum 3

  49. Ime asemblija U Visual Studiu default ime projekta podudara se s default imenom asemblija. Inače, nisu u vezi. Promjena imena projekta ne mijenja ime asemblija. Asembli sa strogim imenom može koristiti samo tipove iz istog takvog asemblija (inače postoji sigurnosni problem). Računarski praktikum 3

  50. Ime asemblija Da bi se asembliju dodijelilo strogo ime, potrebno je stvoriti javno-privatni par ključeva. Radi se o kriptografskim ključevima koji se koriste tijekom kompiliranja. Za generiranje ključa koristi se Strong Name Tool (Sn.exe). Dobiva se datoteka sa .snk ekstenzijom. Primjer:Naredba sn -k keypair.snk stvara par ključeva. Računarski praktikum 3

More Related