Programování I Úvod Jan Růžička
Studijní materiály ● ●
Cíle ● Algoritmizace ● Kódování ● Návrh software ● Testování ● Platformy, nástroje ●.NET Framework
Očekávání ● S pomocí – Schopni popsat algoritmem jednoduchou úlohu – Schopni tento algoritmus zapsat v programovacím jazyce ● Bez pomoci – Porozumět jednoduchému cizímu kódu
Proč ● Příklad 1: Šeliga ● Příklad 2: Jenks
Algoritmizace ● Rozděl a panuj ● Př. Točení piva
Jazyky ● Strojově orientované – assembler – strojový jazyk ● Vyšší – procedurální (C#, Java, Visual Basic, Pascal,...) – funkcionální (Haskel, Lisp) – analytický, matematický, ekonomický software
Jazyky / 2 ● Objektově orientované ● Značkovací
Jazyky / 3 ● Kompilované ● Interpretované – zdrojové – pseudokódové (mezikódové)
Kompilované Zdrojový kód v jazyku C Překlad v GNU Linuxu Překlad v Solarisu Překlad v MS Windows Program pro MS Windows Program pro Solaris Program pro GNU Linux OS MS Windows OS GNU Linux OS Solaris
Interpretované Zdrojový kód v jazyku Java soubor.java Překlad (javac) Bytecode soubor.class OS MS Windows OS GNU Linux OS Solaris JR E
Objektově orientované programování ● Třída ● Rozhraní ● Zapouzdření ● Dědičnost ● Předefinování ● Polymorfismus
Procedurální programování ● Proměnné ● Vstup, Výstup ● Řídící struktury (podmínky, cykly) ● Procedury
Aplikace ● Command Line ● GUI ● WebGUI ●...
Aplikace ● Stand alone ● Klient/server ● Distribuované
Aplikace ● Knihovny (DLL, SO,...) ● Spouštěče (EXE, SH)
C# ● Moderní ● Žádaný ● Relativně jednoduchý ● Objektově orientovaný ● Svázaný s platformou.NET
.NET Framework ● Sada knihoven, interpretu a překladače ● Dostupná na téměř všech OS MS Windows ● Dostupná omezeně pro MacOS a GNU/Linux
Vývojová prostředí pro C# ● V zásadě jakýkoli textový editor ● Lépe však IDE ● Reálně tři možnosti – MS Visual Studio – SharpDevelop – MonoDevelop
Visual Studio
SharpDevelop
MonoDevelop
Základy jazyka C# // Hello1.cs public class Hello1 { public static void Main() { System.Console.WriteLine("Hello, World!"); }
Základy jazyka C# // Hello1.cs using System; public class Hello1 { public static void Main() { Console.WriteLine("Hello, World!"); }
Algoritmus hledání území ● Vstupy – Podmínky – Oblast ● Možnost nenalezení výsledku – cyklus, podmínka, opakování vstupu
C# ● Výjimky ● Komponentové programování ● Jednoduchá dedičnost, více rozhraní ● Přidává události ● Automatická správa paměti
C# - Datové typy ● Objekty ● Primitivní datové typy ● Pole
C# - Primitivní datové typy ● bool, int, double, short, char,... bool content = true; int pocet = 150;
C# - Objekty ● Téměř vše ostatní Osoba karel = new Osoba(); Map mapa = new Map();
C# - Podmínka if (oblasti.Count < 1) { //Zmen parametry //Spust analyzu znovu }
C# - Podmínka / 2 if (oblasti.Count < 1) { //Zmen parametry //Spust analyzu znovu } else { //Zobraz vysledky }
C# - Cyklus do { SpustitAnalyzu(parametry) if (uzemi.Count < 1) { //Zmen parametry; } } while (uzemi.Count < 1);
C# - Komentáře /// /// Summary description. /// class Class1 { static void Main(string[] args) { // TODO: Add code }
.NET Framework ● Sada knihoven, interpretu a překladače ● Dostupná na téměř všech OS MS Windows ● Dostupná omezeně pro MacOS a GNU/Linux
Common Language Runtime
Assembly ● Nasazování aplikací ● Kolekce EXE, DLL, module, manifest ● Private ● Shared (př. Windows Forms)
C# - OOP ● Struktury – struct ● Třídy – class ● Rozhraní – interface
C# - Vlastnosti ● Členská data – public int vek; ● Vlastnosti private short pvek; public short Vek { get { return pvek; } set { pvek = value; }
C# - Metody ● Běžné procedury (funkce)
C# - Metody - parametry ● Hodnotou ● Odkazem (ref) ● Výstupní (out)
C# - Konstruktory public Osoba() { } public Osoba(string jmeno) { pjmeno = jmeno; }
C# - Dědičnost class Student : Osoba { }
C# - Výjimky try { } catch (Exception ex) { }
.NET - System.Object ● Základní třída ● Všechny ostattní jsou z ní odvozeny
.NET - Soubory ● System.IO ● StreamReader ● StreamWriter ● FileStream ● File ● Directory
Zápis do textového souboru using System.IO;... FileStream fs = new FileStream("soubor.txt", FileMode.Create); StreamWriter sw = new StreamWriter(fs); for(int i=0; i<text.GetLength(); i++) { sw.WriteLine(i); }... sw.Close();
Čtení z textového souboru... FileStream fs = new FileStream("soubor.txt"); StreamReader sr = new StreamReader(fs); while((line = sr.ReadLine()) != null) { Console.WriteLine(line); } sr.Close();...
Zápis do binárního souboru using System.IO;... BinaryWriter bw = new BinaryWriter(File.Create("soubor.bin")); for(int i=0; i<text.GetLength(0); i++) bw.Write(i); bw.Close();...
Čtení z binárního souboru using System.IO;... BinaryReader br = new BinaryReader(File.Open("soubor.bin")); try { while(true) Console.WriteLine(br.ReadInt32()); } catch (EndOfStreamException ex) {} finally { br.Close(); }
.NET - System.String ● IndexOf ● Replace ● Split ● Substring ● Trim ● Compare
Algoritmus náhrady řetězců ● Textový soubor k překladu ● Soubor s českými slovy ● Soubor s maďarskými ekvivalenty
Jednorozměné pole ● typ[] nazev_pole; ● int[] polecisel; ● int[] polecisel = new int[10]; ● int[] polecisel = new int[2] {1, 3};
Použití ● polecisel[0] = 10; ● polecisel[1] = 15; ● int x = polecisel[0] + polecisel[1];
Vícerozměrná pole ● int[,] pole; ● int[,] pole = new int[2,2] ; ● int[,] pole = new int[2,2] { {2, 1}, {4, 3} };
Kolekce ● Podobně jako pole ● Více ruzných struktur ● Lepší práce
Iterování ● Stejné pro všechny druhy ● Zajištěno s využitím – IEnumerable – IEnumerator
IEnumerable, IEnumerator public interface IEnumerable { IEnumerator GetEnumerator(); } public interface IEnumerator { bool MoveNext(); object Current {get;} void Reset(); }
Příklad procházení MyCollection myCollection = new MyCollection();... IEnumerator ie = myCollection.GetEnumerator(); while(ie.MoveNext()) { XXX item = (XXX) ie.Current; Console.WriteLine(item);... }
Příklad procházení MyCollection myCollection = new MyCollection()... foreach(XXX item in myCollection) { Console.WriteLine(item);... }
ICollection public interface ICollection : IEnumerable { void copyTo(Array array, int index); int Count {get;} bool IsReadOnly {get;} bool IsSynchronized {get;} object SyncRoot {get;} }
IList public interface IList : ICollection, IEnumerable { object this[int index] {get; set;} int Add(object o); void Clear(); bool Contains(object value); int IndexOf(object value); void Insert(int index, object value); void Remove(object value); void RemoveAt(int index); }
IDictionary public interface IDictionary : ICollection, IEnumerable { object this[object key] {get; set;} ICollection Keys {get;} ICollection Values {get;} void Clear(); bool Contains(object value); IDictionaryEnumerator GetEnumerator(); void Remove(object key); }
Existující třídy kolekcí ● Array ● ArrayList ● Hashtable ● Queue ● Stack ● SortedList
Vícevláknové aplikace ● Nezávislé části kódu běžící v rámci jedné aplikace “paralelně”
Thread ● Instance třídy Thread ● Konstruktor třídy Thread s parametrem ThreadStart ● ThreadStart je delegát ukazující na metodu kde má začít běh vlákna Thread t = new Thread(new ThreadStart(vl.Makej));
Spuštění ● Metoda Start třídy Thread Thread t = new Thread(new ThreadStart(vl.Makej)); t.Start();
Lock ● Zamezení přístupu jiného vlákna lock (this) { for(char c='a'; c<'z'; c++) { Console.Write(c); }
Řízení běhu ● Předání běhu jinému vláknu lock (this) { for(char c='a'; c<'z'; c++) { Console.Write(c); Monitor.Pulse(this); Monitor.Wait(this); }
ADO.NET ● Access Data Objects ● Connection ● DataAdapter ● DataSet ● SqlCommand ● SqlDataReader
ADO.NET Databáze Připojení Datový adaptér Sada dat Formulář s vázanými ovládacími prvky
Connection 1/5 ● Připojení k datovému zdroji ● Různé druhy zdrojů ● SqlConnection (MS SQL Server) ● OLE DB Connection (MS Access (JET), MS Excel, DBF,...) ● ODBC Connection ● Oracle Connection ●...
Connection 2/5 ● using System.Data; ● using System.Data.SqlClient; ● SqlConnection ● SqlConnection.ConnectionString
Connection 3/5 sqlConnection = new System.Data.SqlClient.SqlConnection(); sqlConnection.ConnectionString = "workstation id=GIS;packet size=4096;integrated " + "security=SSPI;data source=GIS;persist security info=False;initial catalog=master";
Connection 4/5 connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + _ "Data Source=D:\Pokusna.mdb;"D:\Pokusna.mdb New OleDbConnection(connectionString)
Connection 5/5 try { sqlConnection.Open(); } catch (Exception ex) { Console.Write(ex.Message); }
ADO.NET Usnadnění 1/5 ● ServerExplorer ● Průvodce vytvořením spojení ● Průvodce vytvořením adapteru ● Průvodce vytvořením datové sady
ADO.NET Usnadnění 2/5
ADO.NET Usnadnění 3/5
ADO.NET Usnadnění 4/5
ADO.NET Usnadnění 5/5
DataAdapter ● Prostředník mezi datovým zdrojem a datovou sadou ● Má definovány SQL dotazy – SELECT – UPDATE, INSERT, DELETE ● Metoda Fill – naplnění datové sady
DataSet ● I více tabulek ● Vazby ● Off line ● XSD – schéma dat ● Možnost převodu do XML
Přístup k datům ● V kódu ● Přes vázané ovládací prvky
Přístup k datům v kódu string s = dsZam.Zamestnanci[0].IDzam;
Přístup k datům přes prvky ● TextBox, ● ComboBox, ● ListBox, ● CheckBox, ● RadioButton, ● DataGrid ● PictureBox
Přístup k datům přes prvky 2
Přístup k datům přes prvky 3 ● Vlastnost DataBindings
Čtení přes SqlDataReader SqlCommand cmd = new SqlCommand("select * from Customers", conn); SqlDataReader rdr = cmd.ExecuteReader(); while (rdr.Read()) { Console.WriteLine(rdr[0]); }
Editace ● Přes vázané ovládací prvky ● Pomocí metod a vlastností tříd DataSet a DataAdapter ● Pomocí SqlCommand
Změna hodnoty pole ● DataSet.Tabulka[Řádek].Sloupec = “hodnota” dsZam.Zamestnanci[0].IDzam = “ruz76”;
Změna dat ve zdroji ● DataAdapter.Update(DataSet); ● DataAdapter.Update(DataTable); ● DataAdapter.Update(DataRow);
Změna dat ve zdroji ● DataAdapter.Update(DataSet); try { OleDbDA.Update(dsZamestnanci); } catch (Exception ex) {... }
Pomocí SqlCommand string insertString insert into Categories (CategoryName, Description) values ('Miscellaneous', 'xx')"; SqlCommand cmd = new SqlCommand(insertString, conn); cmd.ExecuteNonQuery();
Transakce ● Spojení poskytuje instanci transakce ● Váže se s DataAdapterem a jeho příkazy pro aktualizaci
Transakce 2 tr = Con.BeginTransaction(); DbDA.DeleteCommand.Transaction = tr; DbDA.InsertCommand.Transaction = tr; try { DbDA.Update(dsZamestnanci); tr.Commit(); } catch (Exception ex) { tr.Rollback(); }
Zdroje ● us/library/aa288436(VS.71).aspx ● ● ual_Studio_2008_SP1.png ●
Zdroje ● /swi113/slajdy.html ● ostavy/kral/01-m.jpg ● net/content.htm ● nasky/index.html
Zdroje ● ● ● ● ekce=139&kategorie=361