Podstawy programowania obiektowego

Transkrypt

Podstawy programowania obiektowego
Podstawy programowania obiektowego
email: [email protected]
strona: http://aragorn.pb.bialystok.pl/~tabedzki/
Marek Tabędzki
1/23
Wymagania wstępne:
Wskazana byłaby znajomość podstaw programowania strukturalnego (w dowolnym języku).
Tematy zajęć:
1. Pojecie programu. Zmienne, typy zmiennych, instrukcje przypisania, operatory, instrukcje wejścia/
wyjścia. Instrukcje warunkowe.
2. Instrukcje iteracyjne. Operatory logiczne.
3. Typy tablicowe. Algorytmy dotyczące tablic (sortowanie, wyszukiwanie).
4. Wyodrębnianie kodu w postaci funkcji. Wywoływanie funkcji. Parametry funkcji.
5. Pojecie klasy i obiektu. Składowe klasy: pola i metody. Tworzenie i usuwanie obiektów.
6. Pojecie interfejsu i implementacji. Hermetyzacja. Kompozycja - korzystanie z gotowych klas.
7. Dziedziczenie. Wywołania konstruktorów w dziedziczeniu. Rzutowanie w górę i w dół.
Nadpisywanie metod - polimorfizm.
8. Typy interfejsowe. Korzystanie z mechanizmu wyjątków. Klasy generyczne.
Literatura i oprogramowanie:
1. Microsoft Visual Studio (może być w wersji Express) lub MonoDevelop (dla środowiska Linux)
2. Marcin Lis: C#. Praktyczny kurs (Helion)
3. Adam Boduch: Wstęp do programowania w języku C# (Helion)
4. ...czy jedna z wielu innych książek dotyczących podstaw programowania w C#
5. Materiały dostępne w Internecie, np.:
• http://www.csharp-station.com/
• http://ivlo.neostrada.pl/cs_lekcje/index.htm
Zaliczenie:
Brak odrębnej oceny za wykład. Ocena łączna z zajęć z tego przedmiotu na podstawie Pracowni
Specjalistycznej.
2/23
Programowanie:
Proces projektowania i tworzenia kodu źródłowego programów komputerowych.
PROBLEM
→
ALGORYTM
algorytmizacja
→
PROGRAM
kodowanie
P R O G R A M O WA N I E
Algorytm:
Skończony, uporządkowany ciąg jasno zdefiniowanych czynności, koniecznych do
wykonania pewnego rodzaju zadań.
Przepis podający w skończonej liczbie kroków rozwiązanie określonego problemu.
Algorytm można zapisać w dowolnym języku (np. język polski).
Inne sposoby zapisu algorytmu: schematy blokowe, pseudokod.
3/23
Przykład:
wyświetl napis powitalny
wczytaj liczbę
jeśli liczba jest ujemna
zamień ją na dodatnią
wyciągnij pierwiastek z liczby
wypisz wynik
zakończ program
START
wyświetl „podaj liczbę”
wczytaj x
TAK
x = -x
Console.Write("Podaj liczbę ");
double x;
x = double.Parse(Console.ReadLine());
if (x < 0)
x = -x;
double wynik = Math.Sqrt(x);
Console.WriteLine(wynik);
Console.ReadKey();
x<0
?
NIE
wynik = sqrt(x)
wypisz wynik
END
4/23
przykładowy program w C#:
// Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
program: ciąg znaków
- rozmiar znaków ma znaczenie
składniki:
- słowa kluczowe
- identyfikatory
- stałe i napisy
- operatory
- separatory
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello!");
Console.ReadKey();
}
}
}
5/23
static void Main(string[] args)
{
// tu umieszczamy nasz kod
Console.WriteLine("cześć!");
Console.Write("2 + 2 = ");
Console.WriteLine(2 + 2);
/* ten fragment zostanie zignorowany
Console.WriteLine("3 / 2 = "); */
Console.WriteLine("A jak wypisać \"cudzysłów\"?");
Console.WriteLine("Jak w takim razie wypisać znak \\?");
Console.WriteLine("2 + 2 = " + 4);
Console.WriteLine("2 + 2 = {0}", 4);
Console.ReadKey();
}
efekt:
cześć!
2 + 2 = 4
A jak wypisać "cudzysłów"?
Jak w takim razie wypisać znak \?
2 + 2 = 4
2 + 2 = 4
6/23
co to jest zmienna?
static void Main(string[] args)
{
int a;
a
int b, c;
b
c
}
7/23
co to jest zmienna?
static void Main(string[] args)
{
int a;
a
int b, c;
2
a = 2;
b
c
}
8/23
co to jest zmienna?
static void Main(string[] args)
{
int a;
a
int b, c;
2
a = 2;
b = 3;
b
c
3
}
9/23
co to jest zmienna?
static void Main(string[] args)
{
int a;
a
c
b
int b, c;
2
5
3
a = 2;
b = 3;
c = a + b;
Console.WriteLine("wynik wynosi " + c);
Console.WriteLine("{0} + {1} = {2}", a, b, c);
}
wynik wynosi 5
2 + 3 = 5
10/23
static void Main(string[] args)
{
int a;
a
c
b
int b, c;
2
5
3
a = 2;
b = 3;
c = a + b;
Console.WriteLine("wynik wynosi " + c);
Console.WriteLine("{0} + {1} = {2}", a, b, c);
Console.WriteLine(a);
// wartość zmiennej a
Console.WriteLine("a"); // napis "a"
int e;
Console.WriteLine(e); // błąd!
e = 100;
Console.WriteLine(e); // ok
Console.ReadKey();
}
11/23
static void Main(string[] args)
{
// typ zmiennej
// całkowity
int a; // również long, short, byte
a = 2;
double x; // również float, decimal
x = 2.5;
bool b;
b = true; // lub false
char z;
z = '@'; // nie mylić z "@"
2
2,5
True
@
dzień dobry
string txt;
txt = "dzień dobry";
Console.WriteLine("{0}\n{1}\n{2}\n{3}\n{4}",a,x,b,z,txt);
Console.ReadKey();
}
12/23
static void Main(string[] args)
{
// podstawienie
a
int a = 2, b, c;
b
c
a
b
c
2
2
a
b
10
2
a
b
c
10
2
12
2
a = b;
b = a;
10 = a;
a = 10;
a + b = c
c = a + b;
}
// błąd
// ok
// błąd
// ok
c
// błąd
// ok
13/23
static void Main(string[] args)
{
// zamiana dwóch zmiennych
int a, b;
a = 2;
b = 3;
Console.WriteLine("a={0}, b={1}", a, b);
// złe rozwiązanie
a = b;
b = a;
Console.WriteLine("a={0}, b={1}", a, b);
Console.ReadKey();
}
a=2, b=3
a=3, b=3
a
b
2
3
a
b
3
3
a
b
3
3
14/23
static void Main(string[] args)
{
// zamiana dwóch zmiennych
int a, b;
a = 2;
a
b = 3;
Console.WriteLine("a={0}, b={1}", a, b);2
}
// dobre rozwiązanie
int c;
a
c = a;
a = b;
2
b = c;
Console.WriteLine("a={0}, b={1}", a, b);
Console.ReadKey();
a
a=2, b=3
a=3, b=2
b
c
3
b
c
3
2
b
c
3
3
2
a
b
c
3
2
2
15/23
static void Main(string[] args)
{
int a = 5, b = 2, c;
c = 5 / 2; // wynik: 2
c = 5 % 2; // reszta z dzielenia
c = 2 + 3 / 2 - 3 * 5 + 11 % 3;
c = (2 + 3) / 2 - 3 * (5 + 11 % 3);
c += b;
// c = c + b;
c++;
c--;
// c = c + 1;
// c = c - 1;
double x = 2, y;
y
y
y
y
y
=
=
=
=
=
Math.Sqrt(x);
Math.Pow(2, 3);
Math.Abs(-1.5);
Math.Sin(Math.PI / 6);
Math.Round(Math.E);
//
//
//
//
//
pierwiastek kwadratowy
potęga
wartość bezwzględna
sinus
zaokrąglenie
}
16/23
static void Main(string[] args)
{
// konwersja typów
int x;
double y;
x = 5 / 2; // wynik: 2
y = 5 / 2; // wynik: 2
y = 5.0 / 2;
// wynik: 2.5
y = (double)5 / 2; // wynik: 2.5
y = 1.0 + 5 / 2;
y = 1 + 5 / 2.0;
// wynik: 3
// wynik: 3.5
y = x; // ok
x = y; // błąd!
x = (int)y; // ok (obcięcie części ułamkowej)
}
17/23
funkcje wejścia/ wyjścia:
static void Main(string[] args)
{
// pobieranie wartości z konsoli
Console.Write("Jak masz na imię? ");
string imie;
imie = Console.ReadLine();
Console.WriteLine("{0} to bardzo ładne imię", imie);
// pobieranie wartości liczbowej
Console.Write("Ile masz lat? ");
string wiek;
wiek = Console.ReadLine();
Console.WriteLine("Naprawdę? A ja {0}!", wiek * 2 + 7);
int w = int.Parse(wiek);
Console.WriteLine("Naprawdę? A ja {0}!", w * 2 + 7);
Console.ReadKey();
}
18/23
static void Main(string[] args)
{
// znak '.' jako miejsce dziesiętne przy wczytywaniu
// i wypisywaniu liczb rzeczywistych
System.Threading.Thread.CurrentThread.CurrentCulture =
new System.Globalization.CultureInfo("en-US");
Console.Write("Podaj napis > ");
string napis = Console.ReadLine();
Console.Write("Podaj liczbę całkowitą > ");
int a = int.Parse(Console.ReadLine());
Console.Write("Podaj liczbę rzeczywistą > ");
double b = double.Parse(Console.ReadLine());
Console.WriteLine("podałeś: {0}, {1}, {2}", napis, a, b);
Console.ReadKey();
}
19/23
przeliczanie walut:
static void Main(string[] args)
{
Console.Write("Podaj kwotę w euro: ");
double euro = double.Parse(Console.ReadLine());
const double przelicznik = 3.97;
double zł = Math.Round(euro / przelicznik, 2);
Console.WriteLine("{0} euro = {1} zł", euro, zł);
Console.ReadKey();
}
inne rozwiązanie:
double zł = euro / przelicznik;
Console.WriteLine("{0} euro = {1:F2} zł", euro, zł);
20/23
pole trójkąta
static void Main(string[] args)
{
Console.WriteLine("Program oblicza pole trójkąta");
Console.Write("Podaj długość podstawy: ");
double a = double.Parse(Console.ReadLine());
Console.Write("Podaj wysokość: ");
double h = double.Parse(Console.ReadLine());
double pole = a * h / 2;
Console.WriteLine("Pole trójkąta wynosi {0}", pole);
Console.ReadKey();
}
21/23
przeliczanie minut na godziny:
static void Main(string[] args)
{
Console.WriteLine("Podaj czas w minutach");
int minuty = int.Parse(Console.ReadLine());
int godziny = minuty / 60;
minuty %= 60;
godziny %= 24;
Console.WriteLine("{0}:{1:00}", godziny, minuty);
Console.ReadKey();
}
22/23
pierwiastki równania kwadratowego:
static void Main(string[] args)
{
Console.WriteLine("Pierwiastki równania kwadratowego.");
Console.Write("Podaj a: ");
double a = double.Parse(Console.ReadLine());
Console.Write("Podaj b: ");
double b = double.Parse(Console.ReadLine());
Console.Write("Podaj c: ");
double c = double.Parse(Console.ReadLine());
double delta = b * b - 4 * a * c;
double x1 = (-b - Math.Sqrt(delta)) / (2 * a);
double x2 = (-b + Math.Sqrt(delta)) / (2 * a);
Console.WriteLine("x1 = {0}\nx2 = {1}", x1, x2);
Console.ReadKey();
}
23/23