diff --git a/Luento11/ElaimetPerinnalla/ElaimetPerinnalla.cs b/Luento11/ElaimetPerinnalla/ElaimetPerinnalla.cs
new file mode 100644
index 0000000000000000000000000000000000000000..90a2b38d34ad7080ed9e0c05f4e3ced34e1dea5e
--- /dev/null
+++ b/Luento11/ElaimetPerinnalla/ElaimetPerinnalla.cs
@@ -0,0 +1,66 @@
+using System;
+using System.Text;
+using System.Linq;
+using System.Collections.Generic;
+
+namespace ElaimetPerinnalla;
+
+
+/// @author Antti-Jussi
+/// @version 18.02.2025
+/// <summary>
+/// Eläimet perinnällä.
+/// Toimikoon tämä johdantona olio-ohjelmointiin.
+/// Tämä on "pääluokka", josta ohjelma käynnistetään ja toimii
+/// ikään kuin käyttöliittymänä.
+/// </summary>
+public class ElaimetPerinnalla
+{
+    /// <summary>
+    /// Pääohjelmassa luodaan eläinoliot ja muutetaan 
+    /// niiden arvoja ja kutsutaan metodeja.
+    /// </summary>
+    public static void Main()
+    {
+        // string koira1 = "Moppi"; 
+        // double koira1PainoKg = 4.5;
+        // string koira1Rotu = "Coton de Tuleár";
+        Koira moppi = new Koira("Moppi", 4.5);
+        Console.WriteLine($"{moppi.Nimi} painaa {moppi.Paino} kg.");
+        moppi.Paino = 10.25;
+        Console.WriteLine($"{moppi.Nimi} painaa {moppi.Paino} kg.");
+        moppi.Rotu = "Coton de Tuleár";
+        Console.WriteLine($"{moppi.Nimi} on rodultaan {moppi.Rotu}.");
+        moppi.Aantele();
+        
+        Koira rekku = new Koira("Rekku", 25.5);
+        rekku.Rotu = "Saksanpaimenkoira";
+        Console.WriteLine($"{rekku.Nimi} ({rekku.Rotu}) painaa {rekku.Paino} kg!!!");
+        rekku.Aantele();
+
+        Kissa nauku = new Kissa("Nauku");
+        nauku.Rotu = "Siamilainen";
+        nauku.HannanPituus = 30;
+        Console.WriteLine($"Kissa nimeltään {nauku.Nimi} on rodultaan {nauku.Rotu} ja sen hännän pituus on {nauku.HannanPituus}");
+        nauku.Aantele();
+
+        Marsu nuppu = new Marsu("Nuppu");
+        nuppu.Rotu = "Pallo";
+        nuppu.Aantele();
+        nuppu.JuokseJuoksupyorassa(1);
+        Console.WriteLine($"Onko marsu elossa?: {nuppu.OnkoElossa}");
+        for (int i = 0; i < 5; i++)
+        {
+            nuppu.JuokseJuoksupyorassa(30);
+        }
+        // nuppu.jaljellaOlevienKierrostenLkm = 1000; // emme pääse käsiksi yksityiseen muuttujaaan
+        Console.WriteLine($"Onko marsu elossa?: {nuppu.OnkoElossa}");
+
+        Elain[] elaimet = { moppi, rekku, nauku, nuppu };
+        Console.WriteLine(elaimet.Length);
+        for (int i = 0; i < elaimet.Length; i++)
+        {
+            Console.WriteLine($"{elaimet[i].Nimi}, {elaimet[i].Rotu}");
+        }
+    }
+}
\ No newline at end of file
diff --git a/Luento11/ElaimetPerinnalla/ElaimetPerinnalla.csproj b/Luento11/ElaimetPerinnalla/ElaimetPerinnalla.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..085a6e3d4beb32574a83a24dd27da9164799f4a0
--- /dev/null
+++ b/Luento11/ElaimetPerinnalla/ElaimetPerinnalla.csproj
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+    <PropertyGroup>
+        <OutputType>Exe</OutputType>
+        <TargetFramework>net8.0</TargetFramework>
+        <ExternalConsole>true</ExternalConsole>
+    </PropertyGroup>
+
+</Project>
diff --git a/Luento11/ElaimetPerinnalla/Elain.cs b/Luento11/ElaimetPerinnalla/Elain.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7546ab74d8b5bebf84dddd3f576762e3ea4d212b
--- /dev/null
+++ b/Luento11/ElaimetPerinnalla/Elain.cs
@@ -0,0 +1,41 @@
+using System;
+
+namespace ElaimetPerinnalla;
+/// <summary>
+/// Eläin. Toimii yliluokkana
+/// Kissa-, Koira- ja Marsu-luokille,
+/// jotka siis perivät sekä Nimen, Rodun, 
+/// että Aantele-toiminnon.
+/// </summary>
+public class Elain
+{
+    /// <summary>
+    /// Nimi
+    /// </summary>
+    public string Nimi;
+
+    /// <summary>
+    /// Rotu
+    /// </summary>
+    public string Rotu;
+
+
+    /// <summary>
+    /// Eläin
+    /// </summary>
+    /// <param name="nimi">Nimi</param>
+    public Elain(string nimi)
+    {
+        Nimi = nimi;
+    }
+
+    /// <summary>
+    /// Ääntelymetodi. Tämä toimii ns. oletusmetodina
+    /// niissä tapauksissa, kun perivissä luokissa ei ole 
+    /// oletustoteutusta _ylikirjoittavaa_ toteutusta. 
+    /// </summary>
+    public virtual void Aantele()
+    {
+        Console.WriteLine("Olen eläin nimeltä " + Nimi);
+    }
+}
\ No newline at end of file
diff --git a/Luento11/ElaimetPerinnalla/Kissa.cs b/Luento11/ElaimetPerinnalla/Kissa.cs
new file mode 100644
index 0000000000000000000000000000000000000000..fd76ec84ccb290000566f2ae2bbcc5f6a1ed6440
--- /dev/null
+++ b/Luento11/ElaimetPerinnalla/Kissa.cs
@@ -0,0 +1,32 @@
+using System;
+
+namespace ElaimetPerinnalla;
+
+/// <summary>
+/// Kissa, peritty eläimestä.
+/// </summary>
+public class Kissa : Elain
+{
+
+    /// <summary>
+    /// Hännän pituus
+    /// </summary>
+    public int HannanPituus;
+    
+    /// <summary>
+    /// Kissa. Konstruktori kutsuu vastaavaa (nimi parametrina) Eläin-luokan 
+    /// konstruktoria base-avainsanaa käyttäen. Niinpä tämän konstruktorin toteutus jää tyhjäksi.
+    /// </summary>
+    /// <param name="nimi">Kissan nimi.</param>
+    public Kissa(string nimi) : base(nimi)
+    {
+    }
+    
+    /// <summary>
+    /// Kissa miukuu.
+    /// </summary>
+    public override void Aantele()
+    {
+        Console.WriteLine($"Miu mau, sanoo {Nimi}");
+    }
+}
\ No newline at end of file
diff --git a/Luento11/ElaimetPerinnalla/Koira.cs b/Luento11/ElaimetPerinnalla/Koira.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d2487c6ab24d06174e533d873a9fe7b658c5a6a5
--- /dev/null
+++ b/Luento11/ElaimetPerinnalla/Koira.cs
@@ -0,0 +1,34 @@
+using System;
+
+namespace ElaimetPerinnalla;
+
+/// <summary>
+/// Koira, joka on peritty eläimestä.
+/// </summary>
+public class Koira : Elain
+{
+    /// <summary>
+    /// Paino
+    /// </summary>
+    public double Paino;
+
+    /// <summary>
+    /// Koira. (Tämä on tapa "konstruoida" uusi koira-olio. Käytetään nimiä
+    /// konstruktori tai rakentaja.) Konstruktori kutsuu (nimi parametrina)
+    /// Eläin-luokan konstruktoria base-avainsanaa käyttäen.
+    /// </summary>
+    /// <param name="nimi">Nimi</param>
+    /// <param name="paino">Paino</param>
+    public Koira(string nimi, double paino) : base(nimi)
+    {
+        Paino = paino;
+    }
+
+    /// <summary>
+    /// Koira haukkuu.
+    /// </summary>
+    public override void Aantele()
+    {
+        Console.WriteLine($"Hau hau, sanoo {Nimi}");
+    }
+}
\ No newline at end of file
diff --git a/Luento11/ElaimetPerinnalla/Marsu.cs b/Luento11/ElaimetPerinnalla/Marsu.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8787d68b96a41b4e20256d1f3ec36b8b115f6867
--- /dev/null
+++ b/Luento11/ElaimetPerinnalla/Marsu.cs
@@ -0,0 +1,43 @@
+using System;
+namespace ElaimetPerinnalla;
+
+public class Marsu : Elain
+{
+    /// <summary>
+    /// Marsun elämäpisteet
+    /// </summary>
+    private int jaljellaOlevienKierrostenLkm = 100;
+
+    /// <summary>
+    /// Onko marsu elossa.
+    /// HUOMAUTUS: Tämä on julkinen, jolloin kuka tahansa muu pystyisi
+    /// asettamaan marsun kuoliaaksi. Tämä ei tietenkään ole toivottavaa,
+    /// koska marsun pitäisi kuolla silloin ja vain silloin kun se on
+    /// juossut liikaa juoksupyörässä.
+    /// Oikeampi tapa olisi sanoa
+    /// public bool OnkoElossa { get; private set; }
+    /// jolloin sijoittaminen voisi tapahtua vain tästä luokasta käsin. 
+    /// </summary>
+    public bool OnkoElossa = true;
+    
+    /// <summary>
+    /// Marsu. Konstruktori kutsuu vastaavaa (nimi parametrina) Eläin-luokan 
+    /// konstruktoria base-avainsanaa käyttäen. Niinpä tämän konstruktorin 
+    /// toteutus jää tyhjäksi.
+    /// </summary>
+    /// <param name="nimi">Nimi</param>
+    public Marsu(string nimi) : base(nimi)
+    {
+    }
+
+    /// <summary>
+    /// Marsu juoksee juoksupyörässä. Jos marsu on juossut liikaa niin
+    /// se on goodbye. 
+    /// </summary>
+    /// <param name="kierroksia">Montako kierrosta marsu juoksee.</param>
+    public void JuokseJuoksupyorassa(int kierroksia)
+    {
+        jaljellaOlevienKierrostenLkm -= kierroksia;
+        if (jaljellaOlevienKierrostenLkm < 0) OnkoElossa = false;
+    }
+}
\ No newline at end of file
diff --git a/Luento11/Luento11.pdf b/Luento11/Luento11.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..619a1e80225fd74557b3d5995b55d5ee25da45c5
Binary files /dev/null and b/Luento11/Luento11.pdf differ
diff --git a/Luento11/Luento11.sln b/Luento11/Luento11.sln
new file mode 100644
index 0000000000000000000000000000000000000000..59112d5df85b7ba86b1b9e2df049d521eb618b81
--- /dev/null
+++ b/Luento11/Luento11.sln
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SilmukatJaTaulukot", "SilmukatJaTaulukot\SilmukatJaTaulukot.csproj", "{59D7C0A3-0F8D-4205-95AA-C44BB96CBE23}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElaimetPerinnalla", "ElaimetPerinnalla\ElaimetPerinnalla.csproj", "{E43676A3-8DFC-4AB9-BB72-685B1724460B}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{59D7C0A3-0F8D-4205-95AA-C44BB96CBE23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{59D7C0A3-0F8D-4205-95AA-C44BB96CBE23}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{59D7C0A3-0F8D-4205-95AA-C44BB96CBE23}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{59D7C0A3-0F8D-4205-95AA-C44BB96CBE23}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E43676A3-8DFC-4AB9-BB72-685B1724460B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E43676A3-8DFC-4AB9-BB72-685B1724460B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E43676A3-8DFC-4AB9-BB72-685B1724460B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E43676A3-8DFC-4AB9-BB72-685B1724460B}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+EndGlobal
diff --git a/Luento11/SilmukatJaTaulukot/SilmukatJaTaulukot.cs b/Luento11/SilmukatJaTaulukot/SilmukatJaTaulukot.cs
new file mode 100644
index 0000000000000000000000000000000000000000..94f738e03bbc67af9484e7249806aaaa130af132
--- /dev/null
+++ b/Luento11/SilmukatJaTaulukot/SilmukatJaTaulukot.cs
@@ -0,0 +1,65 @@
+using System;
+using System.Text;
+using System.Linq;
+using System.Collections.Generic;
+
+/// <summary>
+/// Luento 11. Vielä silmukoista ja taulukoista. 
+/// </summary>
+public class SilmukatJaTaulukot
+{
+    /// <summary>
+    /// Luento 11. Vielä silmukoista ja taulukoista.
+    /// Taulukon sisällön luominen silmukassa.
+    /// Taulukon sisällön tulostaminen.
+    /// Taulukko paluuarvona. 
+    /// </summary>
+    public static void Main()
+    {
+        // Esimerkki 1: Tehdään 100 pituinen taulukko johon luvut 1..100
+        int[] taulukko1 = new int[100];
+        // taulukko1[0] = 1;
+        // taulukko1[1] = 2;
+        for (int i =0; i < taulukko1.Length; i++)
+        {
+            taulukko1[i] = i+1;
+        }
+        
+        // Esimerkki 2: Miten tulostaa taulukko?
+        // 2.1 silmukassa
+        // Console.WriteLine(taulukko1); // Tämä tulostaa vain taulukon tyypin
+        foreach (int luku in taulukko1)
+        {
+            Console.WriteLine(luku);
+        }
+        
+        // 2.2 String.Joinilla
+        Console.WriteLine(string.Join(", ", taulukko1));
+
+        // Esimerkki 3: Tehdään 15 alkiota pituinen taulukko johon luvut 15..1
+        int[] taulukko2 = new int[15];
+        // taulukko2[0] = 15;
+        // taulukko2[1] = 14;
+        for (int i = 0; i < taulukko2.Length; i++)
+        {
+            taulukko2[i] = taulukko2.Length-i;
+        }
+
+        Console.WriteLine(string.Join(", ", taulukko2));
+        
+        // Esimerkki 4: Taulukko funktion paluuarvona
+        int[] taulukko3 = TeeTaulukko();
+        Console.WriteLine(string.Join(", ", taulukko3));
+    }
+
+    public static int[] TeeTaulukko()
+    {
+        int[] taulukko = new int[5];
+        for (int i = 0; i < taulukko.Length; i++)
+        {
+            taulukko[i] = i + 1;
+        }
+
+        return taulukko;
+    }
+}
\ No newline at end of file
diff --git a/Luento11/SilmukatJaTaulukot/SilmukatJaTaulukot.csproj b/Luento11/SilmukatJaTaulukot/SilmukatJaTaulukot.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..085a6e3d4beb32574a83a24dd27da9164799f4a0
--- /dev/null
+++ b/Luento11/SilmukatJaTaulukot/SilmukatJaTaulukot.csproj
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+    <PropertyGroup>
+        <OutputType>Exe</OutputType>
+        <TargetFramework>net8.0</TargetFramework>
+        <ExternalConsole>true</ExternalConsole>
+    </PropertyGroup>
+
+</Project>