namespace Project_Periodensystem.Model
{
///
/// Repräsentiert ein chemisches Element im Periodensystem
///
/// ZWECK UND DATENMODELL:
/// - Zentrale Datenstruktur für alle Elementinformationen
/// - Kapselt alle relevanten chemischen Eigenschaften
/// - Bildet die Grundlage für Periodensystem-Darstellung und -Berechnungen
///
/// DESIGN PRINCIPLES:
/// - Data Transfer Object (DTO): Reine Datenklasse ohne Geschäftslogik
/// - Immutable nach Konstruktion: Alle Properties haben nur Setter (könnten readonly sein)
/// - Rich Object: Enthält alle relevanten Eigenschaften in einer Klasse
///
/// C# KONZEPTE:
/// - Auto-Properties: { get; set; } automatische Getter/Setter
/// - Constructor mit mehreren Parametern: Vollständige Initialisierung
/// - Value Types (int, double): Primitive Datentypen für Zahlen
/// - Reference Types (string): Referenzdatentypen für Text
///
/// VERWENDUNG IM PERIODENSYSTEM:
/// - Gespeichert in List<Element> Collections
/// - Sortiert nach AtomicNumber für Periodensystem-Darstellung
/// - Gruppiert nach Series für chemische Klassifizierung
/// - Positioniert nach Row/Column im UI-Grid
///
public class Element
{
// ===== IDENTIFIKATIONS-EIGENSCHAFTEN =====
///
/// Ordnungszahl (Protonenzahl) des Elements
///
/// CHEMISCHE BEDEUTUNG:
/// - Eindeutige Identifikation jedes Elements (1-118)
/// - Bestimmt Position im Periodensystem
/// - Entspricht der Anzahl Protonen im Atomkern
///
/// BEISPIELE:
/// - 1 = Wasserstoff (H)
/// - 6 = Kohlenstoff (C)
/// - 79 = Gold (Au)
///
public int AtomicNumber { get; set; }
///
/// Chemisches Symbol (Kurzbezeichnung) des Elements
///
/// KONVENTIONEN:
/// - 1-2 Buchstaben, erster Buchstabe groß
/// - Oft lateinischen/griechischen Ursprungs
/// - International standardisiert (IUPAC)
///
/// BEISPIELE:
/// - "H" = Hydrogen (Wasserstoff)
/// - "Au" = Aurum (Gold)
/// - "Fe" = Ferrum (Eisen)
///
public string Symbol { get; set; }
///
/// Vollständiger wissenschaftlicher Name des Elements
///
/// NAMENSGEBUNG:
/// - Offizielle IUPAC-Bezeichnung
/// - Meist englische Namen in der internationalen Wissenschaft
/// - Historische, mythologische oder wissenschaftliche Herkunft
///
/// BEISPIELE:
/// - "Hydrogen" (griechisch: Wasser-bildend)
/// - "Californium" (nach Kalifornien benannt)
/// - "Einsteinium" (nach Albert Einstein)
///
public string ElementName { get; set; }
// ===== PHYSIKALISCHE EIGENSCHAFTEN =====
///
/// Relative Atommasse in atomaren Masseneinheiten (u)
///
/// CHEMISCHE BEDEUTUNG:
/// - Durchschnittliche Masse aller Isotope eines Elements
/// - Gewichtet nach natürlicher Häufigkeit der Isotope
/// - Basis für stöchiometrische Berechnungen
///
/// EINHEIT: u (atomic mass unit)
/// - 1 u ≈ 1.66054 × 10⁻²⁷ kg
/// - Relative Skala (Kohlenstoff-12 = 12.000 u)
///
/// BEISPIELE:
/// - Wasserstoff: ~1.008 u
/// - Kohlenstoff: ~12.011 u
/// - Uran: ~238.029 u
///
public double AtomicWeight { get; set; }
///
/// Elektronegativität nach Pauling-Skala
///
/// CHEMISCHE BEDEUTUNG:
/// - Fähigkeit eines Atoms, Bindungselektronen anzuziehen
/// - Bestimmt Art der chemischen Bindung (ionisch vs. kovalent)
/// - Wichtig für Vorhersage chemischer Reaktionen
///
/// PAULING-SKALA:
/// - Dimensionslose Größe von 0.7 bis 4.0
/// - Fluor hat den höchsten Wert (4.0)
/// - Trends: Steigt in Perioden von links nach rechts
///
/// BEISPIELE:
/// - Fluor: 4.0 (höchste Elektronegativität)
/// - Sauerstoff: 3.5
/// - Wasserstoff: 2.1
/// - Cäsium: 0.7 (niedrigste)
///
public double Electronegativity { get; set; }
///
/// Dichte bei Standardbedingungen in g/cm³
///
/// PHYSIKALISCHE BEDEUTUNG:
/// - Masse pro Volumeneinheit
/// - Abhängig von Atomgröße und Kristallstruktur
/// - Wichtig für technische Anwendungen
///
/// TRENDS IM PERIODENSYSTEM:
/// - Generell zunehmend mit steigender Ordnungszahl
/// - Maximum bei Osmium (~22.6 g/cm³)
/// - Gase haben sehr geringe Dichten
///
/// BEISPIELE:
/// - Wasserstoff (Gas): ~0.0000899 g/cm³
/// - Wasser (Referenz): 1.0 g/cm³
/// - Gold: ~19.3 g/cm³
/// - Osmium: ~22.6 g/cm³ (dichtestes Element)
///
public double Density { get; set; }
// ===== KLASSIFIKATIONS-EIGENSCHAFTEN =====
///
/// Chemische Serie/Gruppe des Elements
///
/// KLASSIFIKATION:
/// - Gruppiert Elemente nach ähnlichen chemischen Eigenschaften
/// - Basis für Periodensystem-Farben und -Organisation
/// - Ermöglicht Vorhersage chemischen Verhaltens
///
/// WICHTIGE SERIEN:
/// - "Alkali metal": Li, Na, K, Rb, Cs, Fr (sehr reaktiv)
/// - "Noble gas": He, Ne, Ar, Kr, Xe, Rn (inert)
/// - "Halogen": F, Cl, Br, I, At (7 Valenzelektronen)
/// - "Transition metal": Fe, Cu, Au, etc. (d-Block)
/// - "Lanthanoid": Seltene Erden (f-Block)
///
/// UI-VERWENDUNG:
/// - Farbkodierung im Periodensystem
/// - Filterung und Gruppierung
/// - Tooltip-Informationen
///
public string Series { get; set; }
// ===== POSITIONIERUNGS-EIGENSCHAFTEN =====
///
/// Zeile (Periode) im Periodensystem
///
/// CHEMISCHE BEDEUTUNG:
/// - Entspricht der Anzahl Elektronenschalen
/// - Bestimmt vertikale Position im Periodensystem
/// - 1-7 für natürliche Elemente
///
/// TRENDS:
/// - Atomradius nimmt innerhalb einer Periode ab
/// - Ionisierungsenergie steigt innerhalb einer Periode
///
public int Row { get; set; }
///
/// Spalte (Gruppe) im Periodensystem
///
/// CHEMISCHE BEDEUTUNG:
/// - Entspricht der Anzahl Valenzelektronen (vereinfacht)
/// - Bestimmt horizontale Position im Periodensystem
/// - 1-18 nach IUPAC-Nummerierung
///
/// TRENDS:
/// - Elemente derselben Gruppe haben ähnliche Eigenschaften
/// - Chemische Reaktivität folgt Gruppenmustern
///
public int Column { get; set; }
// ===== KONSTRUKTOR =====
///
/// Vollständiger Konstruktor für die Erstellung eines Element-Objekts
///
/// ZWECK:
/// - Stellt sicher, dass alle Eigenschaften beim Erstellen gesetzt werden
/// - Verhindert unvollständig initialisierte Element-Objekte
/// - Ermöglicht direkte Erstellung aus Datenquellen (CSV, JSON, Database)
///
/// C# KONZEPTE:
/// - Constructor Overloading: Könnte mehrere Konstruktoren haben
/// - Parameter Validation: Könnte Validierung der Eingabewerte enthalten
/// - Immutable Object: Nach Konstruktion unveränderlich (wenn Properties readonly wären)
///
/// PARAMETER:
/// - Alle 9 Eigenschaften müssen beim Erstellen angegeben werden
/// - Reihenfolge entspricht logischer Gruppierung (ID, Name, Physik, Position)
///
/// VERWENDUNG:
/// var hydrogen = new Element(1, "H", "Hydrogen", 1.008, 2.1, 0.0000899, "Nonmetal", 1, 1);
///
public Element(int atomicNumber, string symbol, string elementname, double atomicWeight,
double electronegativity, double density, string series, int row, int column)
{
// Eigenschafts-Zuweisungen mit Selbst-Dokumentation
AtomicNumber = atomicNumber; // Eindeutige Identifikation
Symbol = symbol; // Kurze chemische Bezeichnung
ElementName = elementname; // Vollständiger Name
AtomicWeight = atomicWeight; // Relative Atommasse
Electronegativity = electronegativity; // Bindungsverhalten
Density = density; // Physikalische Eigenschaft
Series = series; // Chemische Klassifikation
Row = row; // Periodensystem-Position vertikal
Column = column; // Periodensystem-Position horizontal
}
}
}