Skip to content
Snippets Groups Projects
Commit 1e2e7420 authored by Antti-Jussi Lakanen's avatar Antti-Jussi Lakanen :field_hockey:
Browse files

Luento 11

parent 422e16bf
No related branches found
No related tags found
No related merge requests found
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
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ExternalConsole>true</ExternalConsole>
</PropertyGroup>
</Project>
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
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
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
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
File added

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
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
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ExternalConsole>true</ExternalConsole>
</PropertyGroup>
</Project>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment