Upload files to "/"

This commit is contained in:
2026-07-16 12:19:17 +02:00
commit 489ab30620
9 changed files with 259 additions and 0 deletions
+10
View File
@@ -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
View File
@@ -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");
}
}
}
+15
View File
@@ -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.
+54
View File
@@ -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);
}
}
}
+25
View File
@@ -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.");
}
}
}
}
+33
View File
@@ -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
}
+42
View File
@@ -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;
}
}
}
+41
View File
@@ -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}");
}
}
}
+15
View File
@@ -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