Upload files to "/"
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
namespace ObiektowaTeoria
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
// Tworzenie obiektu klasy Samochod
|
||||
Samochod samochod = new Samochod();
|
||||
samochod.Marka = "Renualt";
|
||||
samochod.RokProdukcji = 2007;
|
||||
|
||||
// Wywołanie metody uruchomienia silnika
|
||||
samochod.UruchomSilnik();
|
||||
samochod.UruchomSilnik(); // Próba ponownego uruchomienia silnika
|
||||
|
||||
Zwierze zwierze = new Kot();
|
||||
zwierze.WydajDzwiek(); // Wywołanie metody przesłoniętej
|
||||
|
||||
// Tworzenie obiektów klasy Pracownik przy użyciu różnych konstruktorów
|
||||
Pracownik pracownik1 = new("Jan");
|
||||
Pracownik pracownik2 = new("Anna", "Kowalska");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
# Obiektowa Teoria
|
||||
|
||||
Repozytorium to przedstawia jak najprościej wyjaśnione elementy związane z programowaniem obiektowym. Każdy plik przedstawia dane zagadnienie:
|
||||
|
||||
* **abstrakcja_interfejsy.cs** - tam znajdziemy wytłumaczenie zapisu Abstrakcji oraz Interfejsów.
|
||||
|
||||
* **definicja_klas.cs** - zawiera ona zapis tworzenia nowej klasy wraz z polami i metodami oraz sposób jak tworzyć nowe obiekty z wykorzystaniem klasy naszej klasy;
|
||||
|
||||
* **dziedziczenie_polimorfizm.cs** - zawiera ona tłumaczenie dot. pojęcia dziedziczenia oraz polimorfizmu w programowaniu obiektowym;
|
||||
|
||||
* **hermetyzacja.cs** - przedstawia ona definicje hermetyzacji wraz z przykładem zapisu;
|
||||
|
||||
* **konstruktor_dekonstruktor.cs** - definicja tłumacząca pojęcie wraz z przykładem konstruktora oraz dekonstruktora;
|
||||
|
||||
* **modyfikatory.md** - opisuje wszystkie najważniejsze modyfikatory dostępu, które znajdziemy w pojęciu programowania obiektowego.
|
||||
@@ -0,0 +1,54 @@
|
||||
namespace ObiektowaTeoria
|
||||
{
|
||||
// Klasa abstrakcyjna - a, która nie może być bezpośrednio
|
||||
// zainstancjonowana (nie można tworzyć jej obiektów). Deklaruje się
|
||||
// ją za pomocą słowa kluczowego za pomocą "abstract". Może zawierać zarówno
|
||||
// metody abstrakcyjne (bez implementacji), jak i metody z implementacją.
|
||||
// Służy jako szablon dla klas dziedziczących, zapewniając wspólny interfejs i
|
||||
// bazową funkcjonalność. Klasy dziedziczące muszą implementować wszystkie metody
|
||||
// abstrakcyjne.
|
||||
public abstract class Figura
|
||||
{
|
||||
public abstract double Pole();
|
||||
}
|
||||
|
||||
// Klasa dziedzicząca implementująca abstrakcyjną metodę
|
||||
public class Kwadrat : Figura
|
||||
{
|
||||
public double Bok;
|
||||
|
||||
public Kwadrat(double bok)
|
||||
{
|
||||
Bok = bok;
|
||||
}
|
||||
|
||||
public override double Pole()
|
||||
{
|
||||
return Bok * Bok;
|
||||
}
|
||||
}
|
||||
|
||||
// Interfejs - czysty kontrakt, który definiuje metody i właściwości, ale nie zawiera ich implementacji.
|
||||
// Definiuje się go za pomocą słowa kluczowego interface. Klasy implementujące interfejs muszą dostarczyć implementację
|
||||
// wszystkich jego metod. Pozwala na tworzenie luźno powiązanych komponentów i ułatwia wielodziedziczenie zachowań.
|
||||
public interface IRysowalny
|
||||
{
|
||||
void Rysuj();
|
||||
}
|
||||
|
||||
// Klasa implementująca interfejs
|
||||
public class Kolo : IRysowalny
|
||||
{
|
||||
public double Promien;
|
||||
|
||||
public Kolo(double promien)
|
||||
{
|
||||
Promien = promien;
|
||||
}
|
||||
|
||||
public void Rysuj()
|
||||
{
|
||||
Console.WriteLine("Rysuję koło o promieniu " + Promien);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
namespace ObiektowaTeoria
|
||||
{
|
||||
/**
|
||||
* Definicja klasy Samochod
|
||||
* Zobacz w pliku Program.cs:8 jak używać tej klasy
|
||||
*/
|
||||
|
||||
public class Samochod() {
|
||||
// Pola klasy
|
||||
public string Marka = "";
|
||||
public int RokProdukcji;
|
||||
public bool StanSilnika = false;
|
||||
|
||||
// Metoda klasy
|
||||
public void UruchomSilnik() {
|
||||
if (!StanSilnika) {
|
||||
StanSilnika = true;
|
||||
Console.WriteLine("Silnik uruchomiony.");
|
||||
} else {
|
||||
Console.WriteLine("Silnik jest już uruchomiony.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
namespace ObiektowaTeoria
|
||||
{
|
||||
// Klasa bazowa
|
||||
public class Zwierze
|
||||
{
|
||||
/*
|
||||
virtual umieszczamy przy deklaracji metody w klasie bazowej, aby zaznaczyć,
|
||||
że ta metoda może być nadpisana w klasach pochodnych. bez virtual metody nie
|
||||
pozwalają na dynamiczne przesłonięcie.
|
||||
*/
|
||||
public virtual void WydajDzwiek()
|
||||
{
|
||||
Console.WriteLine("Zwierzę wydaje dźwięk.");
|
||||
}
|
||||
}
|
||||
|
||||
// Klasa pochodna
|
||||
public class Kot : Zwierze
|
||||
{
|
||||
/*
|
||||
override używamy w klasie dziedziczącej, aby powiadomić kompilator oraz środowisko
|
||||
uruchomieniowe, że metoda zamierzenie przesłania wersję metody wirtualnej z klasy bazowej.
|
||||
Pozwala to na dynamiczne wywołanie właściwej dla konkretnego typu metody, nawet jeśli
|
||||
odwołujemy się do obiektu przez zmienną typu bazowego.
|
||||
*/
|
||||
public override void WydajDzwiek()
|
||||
{
|
||||
Console.WriteLine("Miau");
|
||||
}
|
||||
}
|
||||
|
||||
// Zobacz plik Program.cs:16 jak używać tych klas
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
namespace ObiektowaTeoria
|
||||
{
|
||||
public class KontoBankowe
|
||||
{
|
||||
/*
|
||||
Hermetyzacja polega na ukrywaniu pól (zmiennych) i implementacji
|
||||
klasy przez uczynienie ich niedostępnymi z zewnątrz. Pozwala to na ochronę
|
||||
danych przed nieuprawnioną modyfikacją i zabezpieczenie integralności obiektu.
|
||||
Użytkownik klasy operuje na niej tylko przez dostępne publiczne metody
|
||||
(np. gettery/settery), które kontrolują sposób dostępu i zmiany danych.
|
||||
*/
|
||||
|
||||
// Prywatne pole przechowujące saldo konta
|
||||
// inaczej pole hermetyzowane
|
||||
private decimal saldo;
|
||||
|
||||
// Publiczna właściwość z metodami dostępu
|
||||
public decimal Saldo
|
||||
{
|
||||
get { return saldo; }
|
||||
private set { saldo = value; } // modyfikacja salda tylko wewnątrz klasy
|
||||
}
|
||||
|
||||
public KontoBankowe(decimal poczatkoweSaldo)
|
||||
{
|
||||
saldo = poczatkoweSaldo;
|
||||
}
|
||||
|
||||
public void Wplac(decimal kwota)
|
||||
{
|
||||
if (kwota > 0)
|
||||
saldo += kwota;
|
||||
}
|
||||
|
||||
public void Wyplac(decimal kwota)
|
||||
{
|
||||
if (kwota > 0 && kwota <= saldo)
|
||||
saldo -= kwota;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
namespace ObiektowaTeoria
|
||||
{
|
||||
// Definicja klasy Pracownik
|
||||
// Zobacz w pliku Program.cs:20 jak używać tej klasy
|
||||
public class Pracownik
|
||||
{
|
||||
public string Imie;
|
||||
public string Nazwisko;
|
||||
|
||||
// Konstruktor klasy - metoda, która ma taką samą nazwę jak klasa
|
||||
// i jest wywoływana automatycznie w momencie tworzenia obiektu
|
||||
// (przy użyciu słowa kluczowego new). Jego zadaniem jest inicjalizacja
|
||||
// pól i właściwości obiektu, czyli nadanie mu początkowego stanu.
|
||||
// Jeżeli nie zdefiniujemy żadnego konstruktora, kompilator doda
|
||||
// konstruktor domyślny bez parametrów
|
||||
|
||||
public Pracownik(string imie)
|
||||
{
|
||||
Imie = imie;
|
||||
Nazwisko = "bez nazwiska";
|
||||
Console.WriteLine($"Konstruktor wywołany dla: {imie} bez nazwiska");
|
||||
}
|
||||
|
||||
// Można tworzyć wiele konstruktorów z różną listą parametrów (przeciążanie konstruktorów)
|
||||
public Pracownik(string imie, string nazwisko)
|
||||
{
|
||||
Imie = imie;
|
||||
Nazwisko = nazwisko;
|
||||
Console.WriteLine($"Konstruktor wywołany dla: {imie} {nazwisko}");
|
||||
}
|
||||
|
||||
// Destruktor klasy - metoda wywoływana podczas usuwania obiektu z pamięci przez mechanizm
|
||||
// zbierania śmieci (garbage collector). Umożliwia zwalnianie zasobów niezarządzanych (np.
|
||||
// uchwytów do plików, połączeń sieciowych). Destruktor jest wywoływany w sposób niejawny i
|
||||
// nie można jednoznacznie przewidzieć momentu jego wywołania.
|
||||
~Pracownik()
|
||||
{
|
||||
Console.WriteLine($"Destruktor wywołany dla: {Imie} {Nazwisko}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
# Modyfikatory dostępu
|
||||
|
||||
Modyfikatory te określają, które części kodu mogą uzyskać dostęp do pól, właściwości lub metod klasy:
|
||||
|
||||
* **public** – dostęp jest całkowicie otwarty, dowolny kod może odwołać się do takich elementów.
|
||||
|
||||
* **private** – dostęp do elementu ograniczony jest tylko do wnętrza deklarującej go klasy; pola lub metody są niedostępne na zewnątrz.
|
||||
|
||||
* **protected** – dostęp do elementu mają również klasy dziedziczące po klasie bazowej, ale nie inne klasy spoza hierarchii.
|
||||
|
||||
* **internal** – dostęp ograniczony do bieżącego zestawu kompilacji (np. cały projekt/dll).
|
||||
|
||||
* **protected internal** – łączone działanie protected oraz internal.
|
||||
|
||||
* **private protected** – dostęp tylko w obrębie klasy i jej dziedziczących w tym samym zestawie
|
||||
Reference in New Issue
Block a user