{"id":2308,"date":"2026-05-29T21:47:53","date_gmt":"2026-05-29T21:47:53","guid":{"rendered":"https:\/\/vkrastev1blog.com\/?p=2308"},"modified":"2026-05-29T21:48:41","modified_gmt":"2026-05-29T21:48:41","slug":"questions-and-informations-prepairing-for-java-developer-job-interview","status":"publish","type":"post","link":"https:\/\/vkrastev1blog.com\/2026\/05\/29\/questions-and-informations-prepairing-for-java-developer-job-interview\/","title":{"rendered":"Kysymyksi\u00e4 ja tietoja valmistauduttaessa Java Developer -ty\u00f6haastatteluun"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Mit\u00e4 ovat SOLID-periaatteet?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mik\u00e4 on yhden vastuun periaate (Single Responsibility Principle, SRP):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Luokassa saa olla vain yksi vastuu.<br>Sill\u00e4 pit\u00e4isi olla vain yksi syy muuttaa.<br>Etuja ovat helpompi testata, pienempi kytkent\u00e4 ja parempi organisointi.<br>Esimerkki:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">julkinen luokka Kirja {<br>yksityinen merkkijonon nimi;<br>yksityinen merkkijono tekij\u00e4;<br>yksityinen String teksti\u00e4;<br>\/\/ rakentajat, getterit ja asettajat<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mik\u00e4 on avoin-suljettu periaate (OCP):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ohjelmistokokonaisuuksien (luokat, moduulit, funktiot) tulee olla avoinna laajentamista varten, mutta suljettuja muokkausta varten.<br>Saavuta t\u00e4m\u00e4 k\u00e4ytt\u00e4m\u00e4ll\u00e4 rajapintoja, abstrakteja luokkia ja periytymist\u00e4.<br>Esimerkki:<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">k\u00e4ytt\u00f6liittym\u00e4n muoto {<br>double area();<br>}<br>luokka Ympyr\u00e4 toteuttaa Shape { \/* -toteutuksen <em>\/ } luokka Suorakaide toteuttaa muodon { \/<\/em> toteutus *\/ }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mik\u00e4 on Liskovin korvausperiaate (LSP):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Alatyyppien tulee olla perustyyppins\u00e4 korvattavissa muuttamatta ohjelman oikeellisuutta.<br>Seuraa &#8220;is-a&#8221; -suhdetta.<br>Esimerkki:<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">luokka Lintu { \/* yleinen lintuk\u00e4ytt\u00e4ytyminen <em>\/ } luokka Sparrow laajentaa lintua { \/<\/em> erityinen varpunen k\u00e4ytt\u00e4ytyminen *\/ }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mik\u00e4 on rajapinnan erotteluperiaate (ISP):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Asiakkaita ei pit\u00e4isi pakottaa olemaan riippuvaisia \u200b\u200bliit\u00e4nn\u00f6ist\u00e4, joita he eiv\u00e4t k\u00e4yt\u00e4.<br>Jaa suuret rajapinnat pienempiin, tarkempiin.<br>Esimerkki:<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">k\u00e4ytt\u00f6liittym\u00e4n ty\u00f6ntekij\u00e4 {<br>tyhj\u00e4 ty\u00f6();<br>}<br>k\u00e4ytt\u00f6liittym\u00e4 Eater {<br>void eat();<br>}<br>luokka Robot toteuttaa Worker { \/* toteutus *\/ }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mik\u00e4 on riippuvuuden inversioperiaate (DIP):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Korkean tason moduulit eiv\u00e4t saa olla riippuvaisia \u200b\u200bmatalan tason moduuleista; molempien pit\u00e4isi riippua abstraktioista.<br>Abstraktien ei pit\u00e4isi olla riippuvaisia \u200b\u200byksityiskohdista; yksityiskohtien pit\u00e4isi riippua abstraktioista.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Abstraktio<br>k\u00e4ytt\u00f6liittym\u00e4 MessageSender {<br>void sendMessage(merkkijonoviesti);<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Korkean tason moduuli<br>class NotificationService {<br>yksityinen MessageSender messageSender;<\/p>\n\n\n<div class=\"wp-block-code\">\n\t<div class=\"cm-editor\">\n\t\t<div class=\"cm-scroller\">\n\t\t\t\n<pre>\n<code><div class=\"cm-line\">public NotificationService(MessageSender messageSender) {<\/div><div class=\"cm-line\">    this.messageSender = messageSender;<\/div><div class=\"cm-line\">}<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">public void send(String message) {<\/div><div class=\"cm-line\">    messageSender.sendMessage(message);<\/div><div class=\"cm-line\">}<\/div><\/code><\/pre>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Matalan tason moduuli<br>class EmailSender toteuttaa viestin MessageSender {<br>@Ohittaa<br>public void sendMessage(String message) {<br>System.out.println(&#8220;S\u00e4hk\u00f6postin l\u00e4hett\u00e4minen: &#8221; + viesti);<br>}<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Toinen matalan tason moduuli<br>class SmsSender toteuttaa viestin MessageSender {<br>@Ohittaa<br>public void sendMessage(String message) {<br>System.out.println(&#8220;L\u00e4het\u00e4 tekstiviesti: &#8221; + viesti);<br>}<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ P\u00e4\u00e4luokka<br>public class Main {<br>public static void main(String[] args) {<br>\/\/ K\u00e4yt\u00e4 EmailSenderi\u00e4<br>MessageSender emailSender = new EmailSender();<br>NotificationService ilmoitusPalvelu1 = uusi Ilmoituspalvelu(s\u00e4hk\u00f6postin l\u00e4hett\u00e4j\u00e4);<br>NotificationService1.send(&#8220;Hei s\u00e4hk\u00f6postitse!&#8221;);<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    \/\/ Use SmsSender\n    MessageSender smsSender = new SmsSender();\n    NotificationService notificationService2 = new NotificationService(smsSender);\n    notificationService2.send(&#034;Hello via SMS!&#034;);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MessageSender-liittym\u00e4 toimii abstraktiona.<br>Korkean tason moduuli NotificationService riippuu t\u00e4st\u00e4 abstraktiosta konkreettisten toteutusten sijaan.<br>Matalan tason moduulit, kuten EmailSender ja SmsSender, ovat my\u00f6s riippuvaisia \u200b\u200babstraktiosta toteuttamalla MessageSender-rajapinnan.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mik\u00e4 on SQL:n normalisointi<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mit\u00e4 on normalisointi?<br>Normalisointiin kuuluu tietojen strukturointi relaatiotietokannassa poikkeamien, kuten redundanssin, poistamiseksi.<br>Se pilkkoo suuret, monimutkaiset taulukot pienemmiksi s\u00e4ilytt\u00e4en samalla tietosuhteet.<br>Miksi normalisointi on t\u00e4rke\u00e4\u00e4?<br>V\u00e4hent\u00e4\u00e4 redundanssia: Jakamalla tiedot pienempiin taulukoihin v\u00e4ltymme tallentamasta samoja tietoja useita kertoja.<br>Parantaa kyselyn suorituskyky\u00e4: Pienemm\u00e4t normalisoidut taulukot nopeuttavat kyselyn suorittamista.<br>Minimoi p\u00e4ivityspoikkeamat: P\u00e4ivityksi\u00e4 voidaan tehd\u00e4 vaikuttamatta muihin tietueisiin.<br>Parantaa tietojen eheytt\u00e4: varmistaa johdonmukaiset ja tarkat tiedot.<br>Normalisointiskenaariot:<br>Tietojen eheys: Est\u00e4 ep\u00e4johdonmukaisuudet tietoja p\u00e4ivitett\u00e4ess\u00e4 (esim. asiakkaiden i\u00e4n muutokset).<br>Tehokas kysely: Yksinkertaista monimutkaisia \u200b\u200bkyselyit\u00e4 erittelem\u00e4ll\u00e4 tiedot.<br>Tallennustilan optimointi: Poista tarpeeton redundanssi tilan s\u00e4\u00e4st\u00e4miseksi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mik\u00e4 on Microservices-monoliitti?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mik\u00e4 on monoliitti?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Monoliittinen sovellus rakennetaan yhdeksi yhten\u00e4iseksi kokonaisuudeksi. Se yhdist\u00e4\u00e4 kaikki komponentit (kuten asiakaspuolen k\u00e4ytt\u00f6liittym\u00e4n, tietokannan ja palvelinpuolen sovelluksen) tiiviisti yhdeksi koodipohjaksi.<br>Edut:<br>Helppo k\u00e4ytt\u00f6\u00f6notto: Koska kyseess\u00e4 on yksi suoritettava tiedosto tai hakemisto, k\u00e4ytt\u00f6\u00f6notto on yksinkertaista.<br>Kehitysnopeus: Projektin alkuvaiheessa monoliitit mahdollistavat nopean kehityksen yksinkertaisuutensa ansiosta.<br>Suorituskyky: Keskitetty koodi pystyy k\u00e4sittelem\u00e4\u00e4n erilaisia \u200b\u200btoimintoja.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mit\u00e4 ovat mikropalvelut?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mikropalvelut jakavat sovelluksen pienempiin, itsen\u00e4isesti k\u00e4ytt\u00f6\u00f6notettavissa oleviin palveluihin. Jokainen palvelu keskittyy tiettyyn liiketoiminta-alueeseen.<br>Edut:<br>Skaalautuvuus: Mikropalvelut mahdollistavat yksitt\u00e4isten komponenttien skaalauksen itsen\u00e4isesti.<br>Joustavuus: Kehitt\u00e4j\u00e4t voivat valita kullekin palvelulle erilaisia \u200b\u200btekniikoita.<br>Erist\u00e4minen: Yhden palvelun ep\u00e4onnistumiset eiv\u00e4t vaikuta muihin.<br>Haasteet:<br>Monimutkaisuus: Useiden palvelujen hallinta vaatii vankkaa orkestrointia.<br>Network Overhead: Palvelujen v\u00e4linen tiedonsiirto lis\u00e4\u00e4 viivett\u00e4.<br>K\u00e4ytt\u00f6\u00f6noton monimutkaisuus: P\u00e4ivitysten koordinointi palveluiden v\u00e4lill\u00e4 voi olla hankalaa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mik\u00e4 on polymorfismi?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Menetelm\u00e4n ohittaminen:<br>Kun alaluokka tarjoaa tietyn toteutuksen menetelm\u00e4lle, joka on jo m\u00e4\u00e4ritetty sen superluokassa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Menetelm\u00e4n ylikuormitus:<br>Kun luokassa on useita menetelmi\u00e4, joilla on sama nimi, mutta eri parametrit (eri m\u00e4\u00e4r\u00e4 tai tyyppisi\u00e4 argumentteja).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mit\u00e4 yksityiset rakentajat k\u00e4ytt\u00e4v\u00e4t?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8212; Yksityisi\u00e4 rakentajia k\u00e4ytet\u00e4\u00e4n hy\u00f6dyllisyysluokissa tai vakioluokissa.<br>N\u00e4m\u00e4 luokat sis\u00e4lt\u00e4v\u00e4t vain staattisia menetelmi\u00e4 tai j\u00e4seni\u00e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8212; Alaluokkien v\u00e4ltt\u00e4minen<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8212; Rakentajan delegaatio:<br>Yksityiset rakentajat sallivat rakentajien delegoinnin, jolloin tietyt rakentajat kutsuvat yhteisen yksityisen rakentajan.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8212; Singleton Pattern<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tietoja JVM:st\u00e4<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8212; Kokoonpano:<br>Kun k\u00e4\u00e4nn\u00e4t .java-tiedoston, Java-k\u00e4\u00e4nt\u00e4j\u00e4 luo .class-tiedostoja, jotka sis\u00e4lt\u00e4v\u00e4t tavukoodin (v\u00e4liesitys).<br>Bytecode on alustasta riippumaton ja voi toimia miss\u00e4 tahansa j\u00e4rjestelm\u00e4ss\u00e4, jossa on yhteensopiva JVM.<br>&#8212; Luokkalataimen alaj\u00e4rjestelm\u00e4:<br>Vastaa luokkien lataamisesta muistiin.<br>Lukee .class-tiedostoja, luo binaaridataa ja tallentaa sen menetelm\u00e4alueelle.<br>Luo luokka-objektin, joka edustaa ladattua luokkaa kasomuistiin.<br>Esimerkki: Opiskelija s1 = new Opiskelija(); Luokka c1 = s1.getClass();<br>&#8211;Linkki:<br>Koostuu kolmesta vaiheesta:<br>Varmistus: varmistaa .class-tiedoston oikeellisuuden.<br>Valmistelu: Varaa muistia luokkamuuttujille ja alustaa ne.<br>Resoluutio (valinnainen): Ratkaisee symboliset viittaukset muihin luokkiin tai menetelmiin.<br>&#8212; Alustus:<br>Suorittaa staattisia alustuksia (esim. staattisia lohkoja) ja alustaa staattiset muuttujat.<br>Ilmentym\u00e4muuttujat alustetaan, kun objekti luodaan.<br>&#8211;Suoritusmoottori:<br>Muuntaa tavukoodin konekoodiksi.<br>Sis\u00e4lt\u00e4\u00e4 Just-In-Time (JIT) -kokoelman suorituskyvyn optimointia varten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8212; Yhteenvetona voidaan todeta, ett\u00e4 JVM mahdollistaa Java-ohjelmien suorittamisen miss\u00e4 tahansa tulkitsemalla tavukoodia ja hallitsemalla muistia<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mik\u00e4 on Privat abstrakti menetelm\u00e4?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8212; K\u00e4yt\u00e4 yksityisi\u00e4 menetelmi\u00e4 abstrakteissa luokissa:<br>Vaikka abstraktit menetelm\u00e4t eiv\u00e4t voi olla yksityisi\u00e4, voit k\u00e4ytt\u00e4\u00e4 yksityisi\u00e4 menetelmi\u00e4 abstraktissa luokassa useisiin tarkoituksiin:<br>&#8212; Apumenetelm\u00e4t: Toteuta muiden menetelmien yhteisi\u00e4 toimintoja.<br>&#8212; Kapselointi: Piilota toteutustiedot alaluokista.<br>&#8212; Rakennemaiset luokat: Luo pieni\u00e4 luokkia yksityisill\u00e4 menetelmill\u00e4, jotka toimivat tietos\u00e4ili\u00f6in\u00e4<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mik\u00e4 on roskakori?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8211;Keon muisti:<br>Java-objektit luodaan kasaan, omaan muistialueeseen.<br>Jotkin kohteet muuttuvat saavuttamattomiksi (ohjelma ei en\u00e4\u00e4 viittaa niihin).<br>&#8211;Roskaker\u00e4in (GC):<br>GC tunnistaa ja poistaa k\u00e4ytt\u00e4m\u00e4tt\u00f6m\u00e4t objektit vapauttaakseen muistia.<br>Se toimii automaattisesti taustalla.<br>Kaksi tyyppi\u00e4:<br>Minor GC: Poistaa nuoren sukupolven esineet, joihin ei p\u00e4\u00e4st\u00e4 k\u00e4siksi.<br>Major GC (Full GC): Poistaa vanhan sukupolven esineet.<br>&#8212; Edut:<br>Kehitt\u00e4jien ei tarvitse erikseen poistaa objekteja.<br>GC varmistaa muistin saatavuuden ja est\u00e4\u00e4 OutOfMemoryErrors<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mik\u00e4 on OOP?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">OOP:n nelj\u00e4 periaatetta:<br>&#8212; Kapselointi: Datan (attribuuttien) ja menetelmien (funktioiden) niputtaminen yhteen luokassa toteutustietojen piilottamiseksi ja puhtaan k\u00e4ytt\u00f6liittym\u00e4n luomiseksi.<br>&#8212; Perint\u00f6: Uusien luokkien luominen olemassa olevien luokkien perusteella, niiden ominaisuuksien ja k\u00e4ytt\u00e4ytymisen periminen. Se edist\u00e4\u00e4 koodin uudelleenk\u00e4ytt\u00f6\u00e4.<br>&#8212; Polymorfismi: Mahdollistaa eri luokkien objektien yhten\u00e4isen k\u00e4sittelyn yhteisen rajapinnan kautta. Se mahdollistaa joustavuuden ja laajennettavuuden.<br>&#8212; Abstraktio: Keskittyminen olennaisiin ominaisuuksiin piilottaen samalla tarpeettomat monimutkaisuudet. Abstraktio yksinkertaistaa suunnittelua ja tekee siit\u00e4 hallittavamman.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ACID-ominaisuudet ovat ratkaisevassa roolissa tapahtumien luotettavuuden ja johdonmukaisuuden varmistamisessa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8211;atomisiteetti:<br>Liiketoimet joko toteutetaan kokonaan tai ei ollenkaan.<br>Ei osittaista suoritusta: Jos tapahtuma ep\u00e4onnistuu puoliv\u00e4liss\u00e4, kaikki tietokantaan tehdyt muutokset peruutetaan.<br>Esimerkki: Harkitse 100 dollarin siirt\u00e4mist\u00e4 tililt\u00e4 X tilille Y. Jos tapahtuma ep\u00e4onnistuu X:st\u00e4 v\u00e4hennyksen j\u00e4lkeen, mutta ennen Y:n lis\u00e4\u00e4mist\u00e4, tietokanta pysyy johdonmukaisena.<br>&#8211;Johdonmukaisuus:<br>Tietokannan on s\u00e4ilytett\u00e4v\u00e4 eheysrajoitukset ennen tapahtumaa ja sen j\u00e4lkeen.<br>Esimerkki: Jos kokonaissumma ennen tapahtumaa on 700 $ (X: 500 $, Y: 200 $), sen pit\u00e4isi pysy\u00e4 samana tapahtuman j\u00e4lkeen (X: 400 $, Y: 300 $).<br>&#8211;Erist\u00e4ytyminen:<br>Useita tapahtumia voi tapahtua samanaikaisesti ilman, ett\u00e4 ne vaikuttavat toisiinsa.<br>Yhden tapahtuman tekem\u00e4t muutokset eiv\u00e4t n\u00e4y muille ennen kuin ne on tehty.<br>Varmistaa vastaavat tulokset kuin tapahtumat suoritettaisiin sarjassa.<br>Esimerkki: Tapahtumien erist\u00e4minen est\u00e4\u00e4 lomitetuista toiminnoista johtuvat ep\u00e4johdonmukaisuudet.<br>&#8211;Kest\u00e4vyys:<br>Kun tapahtuma on sitoutunut, sen muutokset ovat pysyvi\u00e4.<br>Selvi\u00e4\u00e4 j\u00e4rjestelm\u00e4vioista tai kaatumisista.<br>Varmistaa tietojen pysyvyyden.<br>Esimerkki: Jopa j\u00e4rjestelm\u00e4n uudelleenk\u00e4ynnistyksen j\u00e4lkeen tehdyt muutokset pysyv\u00e4t ennallaan.<br>Muista, ett\u00e4 ACID-ominaisuudet tarjoavat perustan luotettavalle ja johdonmukaiselle tietokantatoiminnalle! \ud83c\udf1f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mik\u00e4 on strategiamalli?<br>Kuvaus: M\u00e4\u00e4ritt\u00e4\u00e4 algoritmiperheen, kapseloi jokaisen ja tekee niist\u00e4 kesken\u00e4\u00e4n vaihdettavia. Sen avulla algoritmi voi vaihdella niit\u00e4 k\u00e4ytt\u00e4vist\u00e4 asiakkaista riippumatta.<br>Esimerkki:<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Sy\u00f6misk\u00e4ytt\u00e4ytymisen k\u00e4ytt\u00f6liittym\u00e4<br>k\u00e4ytt\u00f6liittym\u00e4 EatBehavior {<br>void eat();<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Sy\u00f6misk\u00e4ytt\u00e4ytymisen konkreettiset toteutukset<br>luokka NormalDiet toteuttaa EatBehavior {<br>@Ohittaa<br>public void eat() {<br>\/\/ Normaali ruoka<br>}<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">luokka LosingWeightDiet toteuttaa EatBehavior {<br>@Ohittaa<br>public void eat() {<br>\/\/ Terveellinen ruoka<br>}<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Kissaluokka sy\u00f6misk\u00e4ytt\u00e4ytymisell\u00e4<br>abstrakti luokka Cat {<br>EatBehavior eatBehavior;<\/p>\n\n\n<div class=\"wp-block-code\">\n\t<div class=\"cm-editor\">\n\t\t<div class=\"cm-scroller\">\n\t\t\t\n<pre>\n<code><div class=\"cm-line\">public void eat() {<\/div><div class=\"cm-line\">    eatBehavior.eat();<\/div><div class=\"cm-line\">}<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">public void setEatBehavior(EatBehavior eatBehavior) {<\/div><div class=\"cm-line\"> this.eatBehavior = eatBehavior;<\/div><div class=\"cm-line\">}<\/div><\/code><\/pre>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ K\u00e4ytt\u00f6<br>Kissakissa = uusi Kissa();<br>cat.setEatBehavior(new LosingWeightDiet());<br>cat.eat(); \/\/ Kissa sy\u00f6 terveellisemm\u00e4ll\u00e4 ruokavaliolla<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Luovat mallit:<br>N\u00e4m\u00e4 mallit keskittyv\u00e4t luokan instantiaatioon.<br>Esimerkkej\u00e4 mukana<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8212; Tehdasmenetelm\u00e4,<br>Ongelmailmoitus: Oletetaan, ett\u00e4 haluamme luoda erilaisia \u200b\u200b\u200b\u200btuotteita (esim. autoja, polkupy\u00f6ri\u00e4, polkupy\u00f6ri\u00e4) yhdist\u00e4m\u00e4tt\u00e4 koodiamme tiukasti tiettyihin toteutuksiin.<br>T\u00e4rkeimm\u00e4t komponentit:<br>Tuote: Abstrakti luokka tai k\u00e4ytt\u00f6liittym\u00e4, joka m\u00e4\u00e4ritt\u00e4\u00e4 yhteiset toiminnot tehtaan luomille objekteille.<br>Betonituotteet: Todelliset tuoterajapinnan toteuttavat luokat, jotka edustavat tietyntyyppisi\u00e4 objekteja.<br>Luoja: Abstrakti luokka tai k\u00e4ytt\u00f6liittym\u00e4, joka ilmoittaa tehdasmetodin. Se vastaa tuoteobjektien luomisesta, mutta delegoi varsinaisen luomisen alaluokille.<br>Concrete Creators: Creatorin alaluokat, jotka toteuttavat tehdasmenetelm\u00e4n. He p\u00e4\u00e4tt\u00e4v\u00e4t, mink\u00e4 betonituotteen luodaan sy\u00f6teparametrien tai konfiguraation perusteella.<br>Factory Method: Luokassa Creator m\u00e4\u00e4ritetty menetelm\u00e4, joka luo tuoteobjekteja. Se on tyypillisesti julistettu abstraktiksi Creatorissa ja toteutettu Concrete Creatorsissa.<br>Esimerkki Javassa: Oletetaan, ett\u00e4 meill\u00e4 on tehdas, joka valmistaa erilaisia \u200b\u200bajoneuvoja. T\u00e4ss\u00e4 on yksinkertaistettu esimerkki:<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ AbstractProduct<br>k\u00e4ytt\u00f6liittym\u00e4 Tuote {<br>void display();<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Betonituotteet<br>luokka Auton ty\u00f6v\u00e4lineet Tuote {<br>public void display() {<br>System.out.println(&#8220;Auto luotu&#8221;);<br>}<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">luokka Py\u00f6r\u00e4n ty\u00f6v\u00e4lineet Tuote {<br>public void display() {<br>System.out.println(&#8220;Py\u00f6r\u00e4 luotu&#8221;);<br>}<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Luoja (tehdas)<br>k\u00e4ytt\u00f6liittym\u00e4 Tehdas {<br>Tuotteen tehdasMethod();<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Konkreettiset tekij\u00e4t<br>luokka ConcreteFactoryA toteuttaa Factory {<br>public Product factoryMethod() {<br>palauta uusi auto();<br>}<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">luokka ConcreteFactoryB toteuttaa Factory {<br>public Product factoryMethod() {<br>palauta uusi py\u00f6r\u00e4();<br>}<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">public class FactoryMethodExample {<br>public static void main(String[] args) {<br>TehdastehdasA = uusi BetonitehdasA();<br>TuotetuoteA = tehdasA.tehdasMethod();<br>tuoteA.n\u00e4ytt\u00f6();<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    Factory factoryB = new ConcreteFactoryB();\n    Product productB = factoryB.factoryMethod();\n    productB.display();\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8212; Rakentaja<br>Builder Pattern on luova suunnittelumalli, jonka avulla voit rakentaa monimutkaisia \u200b\u200bobjekteja askel askeleelta,<br>erottaa niiden rakenteen niiden esityksest\u00e4. T\u00e4ss\u00e4 on yksinkertainen esimerkki Javassa:<br>\/\/ M\u00e4\u00e4rit\u00e4 luokka, jonka haluat rakentaa<br>class Post {<br>yksityinen lopullinen String otsikko;<br>yksityinen lopullinen String teksti;<br>yksityinen lopullinen String-luokka;<\/p>\n\n\n<div class=\"wp-block-code\">\n\t<div class=\"cm-editor\">\n\t\t<div class=\"cm-scroller\">\n\t\t\t\n<pre>\n<code><div class=\"cm-line\">Post(Builder builder) {<\/div><div class=\"cm-line\">    this.title = builder.title;<\/div><div class=\"cm-line\">    this.text = builder.text;<\/div><div class=\"cm-line\">    this.category = builder.category;<\/div><div class=\"cm-line\">}<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">\/\/ Getters for properties<\/div><div class=\"cm-line\">public String getTitle() {<\/div><div class=\"cm-line\">    return title;<\/div><div class=\"cm-line\">}<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">public String getText() {<\/div><div class=\"cm-line\">    return text;<\/div><div class=\"cm-line\">}<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">public String getCategory() {<\/div><div class=\"cm-line\">    return category;<\/div><div class=\"cm-line\">}<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">\/\/ Builder class<\/div><div class=\"cm-line\">public static class Builder {<\/div><div class=\"cm-line\">    private String title;<\/div><div class=\"cm-line\">    private String text;<\/div><div class=\"cm-line\">    private String category;<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">    public Builder title(String title) {<\/div><div class=\"cm-line\">        this.title = title;<\/div><div class=\"cm-line\">        return this;<\/div><div class=\"cm-line\">    }<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">    public Builder text(String text) {<\/div><div class=\"cm-line\">        this.text = text;<\/div><div class=\"cm-line\">        return this;<\/div><div class=\"cm-line\">    }<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">    public Builder category(String category) {<\/div><div class=\"cm-line\">        this.category = category;<\/div><div class=\"cm-line\">        return this;<\/div><div class=\"cm-line\">    }<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">    public Post build() {<\/div><div class=\"cm-line\">        return new Post(this);<\/div><div class=\"cm-line\">    }<\/div><div class=\"cm-line\">}<\/div><\/code><\/pre>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ K\u00e4ytt\u00f6<br>public class Main {<br>public static void main(String[] args) {<br>L\u00e4het\u00e4 viesti = uusi Post.Builder()<br>.title(&#8220;Java Builder Pattern&#8221;)<br>.text(&#8220;Builder-mallin k\u00e4ytt\u00f6\u00f6notto Javassa&#8221;)<br>.category(&#8220;Suunnittelumallit&#8221;)<br>.rakentaa();<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    System.out.println(&#034;Title: &#034; + post.getTitle());\n    System.out.println(&#034;Text: &#034; + post.getText());\n    System.out.println(&#034;Category: &#034; + post.getCategory());\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8211;Prototyyppi<br>Prototyyppikuvio on luova suunnittelukuvio, jonka avulla voit luoda uusia objekteja kopioimalla olemassa olevan objektin.<br>Sen sijaan, ett\u00e4 luot uusia ilmentymi\u00e4 tyhj\u00e4st\u00e4, kloonaat olemassa olevan prototyypin, joka voi olla tehokkaampi ja joustavampi. Sukellaan esimerkkiin Javassa:<br>M\u00e4\u00e4rit\u00e4 prototyypin k\u00e4ytt\u00f6liittym\u00e4: Ensin luomme abstraktin luokan tai k\u00e4ytt\u00f6liittym\u00e4n nimelt\u00e4 Tree abstraktilla menetelm\u00e4ll\u00e4 copy():<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">julkinen abstrakti luokka Puu {<br>julkinen abstrakti Puukopio();<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Betoniprototyypit: Seuraavaksi toteutamme kaksi betoniluokkaa, jotka laajentavat Tree\u00e4: PlasticTree ja PineTree. N\u00e4m\u00e4 luokat edustavat tietyntyyppisi\u00e4 puita ja tarjoavat oman copy()-menetelm\u00e4n toteutuksen:<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">public class PlasticTree laajentaa Tree {<br>@Ohittaa<br>julkinen puukopio() {<br>PlasticTree plasticTreeClone = new PlasticTree(this.getMass(), this.getHeight());<br>plasticTreeClone.setPosition(this.getPosition());<br>palata muovi TreeClone;<br>}<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">julkinen luokka PineTree laajentaa Puu {<br>@Ohittaa<br>julkinen puukopio() {<br>PineTree pineTreeClone = uusi PineTree(this.getMass(), this.getHeight());<br>pineTreeClone.setPosition(this.getPosition());<br>paluu pineTreeClone;<br>}<br>}<br>N\u00e4ill\u00e4 luokilla r\u00e4\u00e4t\u00e4l\u00f6imme kloonausprosessin tietyn puutyypin perusteella. Kopioimme esimerkiksi alkuper\u00e4isen puun massan, korkeuden ja sijainnin.<br>K\u00e4ytt\u00f6: Luodaan nyt esimerkkej\u00e4 konkreettisista prototyypeist\u00e4mme:<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">public class Main {<br>public static void main(String[] args) {<br>Puu alkuper\u00e4inenPlasticTree = uusi Muovipuu(10, 5);<br>Puu kloonattuPlasticTree = alkuper\u00e4inenPlasticTree.copy();<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    Tree originalPineTree = new PineTree(15, 8);\n    Tree clonedPineTree = originalPineTree.copy();\n\n    \/\/ Use the cloned trees as needed\n    \/\/ ...\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mit\u00e4 ovat rakennemallit?<br>N\u00e4m\u00e4 mallit k\u00e4sittelev\u00e4t luokan rakennetta ja koostumusta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8212; Adapterikuvio<br>Adapter Pattern on rakennesuunnittelumalli, jonka avulla voit saada kaksi yhteensopimatonta liit\u00e4nt\u00e4\u00e4 toimimaan yhdess\u00e4.<br>Se toimii siltana n\u00e4iden rajapintojen v\u00e4lill\u00e4 ja mahdollistaa yhteisty\u00f6n muuttamatta niiden l\u00e4hdekoodia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Objektisovitin:<br>T\u00e4ss\u00e4 l\u00e4hestymistavassa k\u00e4yt\u00e4mme koostumusta logiikan delegoimiseen sovittimelle.<br>Sovitin sis\u00e4lt\u00e4\u00e4 Adapteen ja delegoi request()-metodin SpecificRequest()-metodiin Adapteessa.<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Sopeutuva (nykyinen luokka)<br>luokan sopeutuja {<br>void m\u00e4\u00e4ritettyRequest() {<br>System.out.println(&#8220;Sovittajan erityinen pyynt\u00f6&#8221;);<br>}<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Kohdek\u00e4ytt\u00f6liittym\u00e4<br>k\u00e4ytt\u00f6liittym\u00e4n kohde {<br>mit\u00e4t\u00f6n pyynt\u00f6();<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Sovitin (k\u00e4ytt\u00e4en koostumusta)<br>luokka Sovitin toteuttaa Kohde {<br>yksityinen lopullinen Sopeutuva sopeutuja;<\/p>\n\n\n<div class=\"wp-block-code\">\n\t<div class=\"cm-editor\">\n\t\t<div class=\"cm-scroller\">\n\t\t\t\n<pre>\n<code><div class=\"cm-line\">Adapter(Adaptee adaptee) {<\/div><div class=\"cm-line\">    this.adaptee = adaptee;<\/div><div class=\"cm-line\">}<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">@Override<\/div><div class=\"cm-line\">public void request() {<\/div><div class=\"cm-line\">    adaptee.specificRequest();<\/div><div class=\"cm-line\">}<\/div><\/code><\/pre>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Luokkasovitin:<br>Vaatii useita perint\u00f6j\u00e4 (ei suoraan mahdollista Javassa).<br>Voimme saavuttaa sen k\u00e4ytt\u00e4m\u00e4ll\u00e4 rajapintoja oletusmenetelmill\u00e4.<br>Sovitin laajentaa sek\u00e4 Target- ett\u00e4 Adaptee-luokkia.<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Kohdek\u00e4ytt\u00f6liittym\u00e4<br>k\u00e4ytt\u00f6liittym\u00e4n kohde {<br>mit\u00e4t\u00f6n pyynt\u00f6();<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Sopeutuva (nykyinen luokka)<br>luokan sopeutuja {<br>void m\u00e4\u00e4ritettyRequest() {<br>System.out.println(&#8220;Sovittajan erityinen pyynt\u00f6&#8221;);<br>}<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ Sovitin (k\u00e4ytt\u00e4en luokan periytymist\u00e4)<br>luokka Adapteri laajentaa Adaptee toteuttaa Kohde {<br>@Ohittaa<br>julkinen mit\u00e4t\u00f6n pyynt\u00f6() {<br>m\u00e4\u00e4riteltyRequest();<br>}<br>}<br>Edut ja vaihdot:<br>Class Adapter toimii hyvin yksi-yhteen menetelm\u00e4kartoituksissa.<br>Object Adapter tarjoaa enemm\u00e4n joustavuutta ja v\u00e4ltt\u00e4\u00e4 koodin muuttamisen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8212; Sisustuskuvio<br>Decorator Pattern on luova suunnittelukuvio, jonka avulla voit dynaamisesti lis\u00e4t\u00e4 toimintoja ja k\u00e4ytt\u00e4ytymist\u00e4 esineeseen ilman<br>vaikuttaa muiden samassa luokassa olevien objektien k\u00e4ytt\u00e4ytymiseen. Se on erityisen hy\u00f6dyllinen, kun haluat laajentaa objektia<br>ominaisuuksia muuttamatta sen rakennetta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Yleiskatsaus:<br>Decorator Pattern tarjoaa parannetun k\u00e4ytt\u00f6liittym\u00e4n alkuper\u00e4iseen esineeseen k\u00e4\u00e4rim\u00e4ll\u00e4 siihen lis\u00e4toimintoja.<br>Suosimme koostumusta perinn\u00f6llisyyden sijaan v\u00e4hent\u00e4\u00e4ksemme alaluokkien yleiskustannuksia.<br>Koristereita voidaan lis\u00e4t\u00e4 ajon aikana, mik\u00e4 mahdollistaa joustavuuden.<br>Esimerkkiskenaario: Oletetaan, ett\u00e4 meill\u00e4 on joulukuusi ja haluamme koristella sen erilaisilla esineill\u00e4, kuten seppeleell\u00e4, hopealankalla ja kuplavaloilla. Noudatamme alkuper\u00e4isi\u00e4 Gang of Four -suunnittelukonventioita:<br>Toteutus:<br>Luo ensin ChristmasTree-k\u00e4ytt\u00f6liittym\u00e4:<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">julkinen k\u00e4ytt\u00f6liittym\u00e4 Joulupuu {<br>merkkijono koristele();<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Toteuta k\u00e4ytt\u00f6liittym\u00e4 peruspuulla:<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">public class ChristmasTreeImpl toteuttaa ChristmasTreen {<br>@Ohittaa<br>julkinen merkkijono koristella() {<br>palauta &#8220;joulukuusi&#8221;;<br>}<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Luo seuraavaksi abstrakti TreeDecorator-luokka, joka toteuttaa joulukuusen ja pit\u00e4\u00e4 koristellun puun:<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">julkinen abstrakti luokka TreeDecorator toteuttaa joulukuusen {<br>yksityinen lopullinen joulukuusi;<\/p>\n\n\n<div class=\"wp-block-code\">\n\t<div class=\"cm-editor\">\n\t\t<div class=\"cm-scroller\">\n\t\t\t\n<pre>\n<code><div class=\"cm-line\">public TreeDecorator(ChristmasTree tree) {<\/div><div class=\"cm-line\">    this.tree = tree;<\/div><div class=\"cm-line\">}<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">@Override<\/div><div class=\"cm-line\">public String decorate() {<\/div><div class=\"cm-line\">    return tree.decorate();<\/div><div class=\"cm-line\">}<\/div><\/code><\/pre>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Luo nyt erityisi\u00e4 sisustajia. Esimerkiksi BubbleLights:<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">public class BubbleLights laajentaa TreeDecorator {<br>julkiset BubbleLights(joulupuu) {<br>super(puu);<br>}<\/p>\n\n\n<div class=\"wp-block-code\">\n\t<div class=\"cm-editor\">\n\t\t<div class=\"cm-scroller\">\n\t\t\t\n<pre>\n<code><div class=\"cm-line\">@Override<\/div><div class=\"cm-line\">public String decorate() {<\/div><div class=\"cm-line\">    return super.decorate() + &quot; with Bubble Lights&quot;;<\/div><div class=\"cm-line\">}<\/div><\/code><\/pre>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">public class Garland laajentaa TreeDecorator {<br>julkinen seppele (joulupuu) {<br>super(puu);<br>}<\/p>\n\n\n<div class=\"wp-block-code\">\n\t<div class=\"cm-editor\">\n\t\t<div class=\"cm-scroller\">\n\t\t\t\n<pre>\n<code><div class=\"cm-line\">@Override<\/div><div class=\"cm-line\">public String decorate() {<\/div><div class=\"cm-line\">    return super.decorate() + &quot; with Garland&quot;;<\/div><div class=\"cm-line\">}<\/div><\/code><\/pre>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">}<br>K\u00e4ytt\u00f6:<br>Luo koristeltuja puita:<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">julkinen luokka DecoratorPatternDemo {<br>public static void main(String[] args) {<br>Joulupuu1 = uusi Garland(new Christmas TreeImpl());<br>System.out.println(tree1.decorate()); \/\/ Tulos: &#8220;Joulukuusi Garlandilla&#8221;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    ChristmasTree tree2 = new BubbleLights(new Garland(new Garland(new ChristmasTreeImpl())));\n    System.out.println(tree2.decorate()); \/\/ Output: &#034;Christmas tree with Garland with Garland with Bubble Lights&#034;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">}<br>Kuvio mahdollistaa koristeiden lis\u00e4\u00e4misen ajon aikana, mik\u00e4 antaa joustavuutta sisustamiseen tarpeen mukaan.<br>Muista, ett\u00e4 koristelukuviota k\u00e4ytet\u00e4\u00e4n laajalti tilanteissa, joissa haluat parantaa kohteen k\u00e4ytt\u00e4ytymist\u00e4 muuttamatta sen ydinrakennetta<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8212; Julkisivukuvio<br>Julkisivukuvio on rakennesuunnittelumalli, joka yksinkertaistaa vuorovaikutusta monimutkaisen osaj\u00e4rjestelm\u00e4n kanssa tarjoamalla yhten\u00e4isen k\u00e4ytt\u00f6liittym\u00e4n.<br>Se toimii &#8220;etuovena&#8221;, joka piilottaa taustalla olevan monimutkaisuuden ja helpottaa asiakkaiden j\u00e4rjestelm\u00e4n k\u00e4ytt\u00f6\u00e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8212; Komposiitti<br>Yhdistelm\u00e4kuvio on rakennesuunnittelukuvio, jonka avulla voit muodostaa objekteja puurakenteiksi edustamaan osia kokonaisista hierarkioista.<br>Yhdistelm\u00e4kuvion p\u00e4\u00e4ideana on rakentaa objekteista puurakenne, jossa yksitt\u00e4isill\u00e4 objekteilla ja komposiittiobjekteilla on yhteinen k\u00e4ytt\u00f6liittym\u00e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Peruskomponentti (osasto): M\u00e4\u00e4rittelemme peruskomponentiksi yksinkertaisen osastoliittym\u00e4n:<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">julkinen k\u00e4ytt\u00f6liittym\u00e4 Osasto {<br>void tulosta OsastonNimi();<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Leaf Components (rahoitusosasto ja myyntiosasto): Luodaan talous- ja myyntiosastoille luokat, jotka molemmat toteuttavat osastorajapinnan:<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">public class Talousosasto toteuttaa osaston {<br>\/\/ K\u00e4ytt\u00f6\u00f6noton tiedot (esim. tunnus, nimi)<br>public void printDepartmentName() {<br>System.out.println(getClass().getSimpleName());<br>}<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">public class Myyntiosasto toteuttaa osasto {<br>\/\/ K\u00e4ytt\u00f6\u00f6noton tiedot (esim. tunnus, nimi)<br>public void printDepartmentName() {<br>System.out.println(getClass().getSimpleName());<br>}<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e4m\u00e4 lehtiluokat toteuttavat printDepartmentName()-menetelm\u00e4n eiv\u00e4tk\u00e4 sis\u00e4ll\u00e4 viittauksia muihin osastoobjekteihin.<br>Yhdistelm\u00e4elementti (HeadDepartment): Luodaan yhdistelm\u00e4luokkana HeadDepartment, joka sis\u00e4lt\u00e4\u00e4 kokoelman osastokomponentteja:<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">tuonti java.util.ArrayList;<br>tuonti java.util.List;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">public class HeadDepartment toteuttaa osasto {<br>yksityinen kokonaislukutunnus;<br>yksityinen merkkijonon nimi;<br>yksityinen luettelo lapsiosastot;<\/p>\n\n\n<div class=\"wp-block-code\">\n\t<div class=\"cm-editor\">\n\t\t<div class=\"cm-scroller\">\n\t\t\t\n<pre>\n<code><div class=\"cm-line\">public HeadDepartment(Integer id, String name) {<\/div><div class=\"cm-line\">    this.id = id;<\/div><div class=\"cm-line\">    this.name = name;<\/div><div class=\"cm-line\">    this.childDepartments = new ArrayList&lt;&gt;();<\/div><div class=\"cm-line\">}<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">public void printDepartmentName() {<\/div><div class=\"cm-line\">    childDepartments.forEach(Department::printDepartmentName);<\/div><div class=\"cm-line\">}<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">public void addDepartment(Department department) {<\/div><div class=\"cm-line\">    childDepartments.add(department);<\/div><div class=\"cm-line\">}<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">public void removeDepartment(Department department) {<\/div><div class=\"cm-line\">    childDepartments.remove(department);<\/div><div class=\"cm-line\">}<\/div><\/code><\/pre>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">HeadDepartment-luokka toteuttaa printDepartmentName()-menetelm\u00e4n ja tarjoaa menetelmi\u00e4 aliosastojen lis\u00e4\u00e4miseen ja poistamiseen.<br>K\u00e4ytt\u00f6: Voit luoda esiintymi\u00e4 lehtiosastoista (esim. talousosasto, myyntiosasto) ja yhdistelm\u00e4osastosta (esim. HeadDepartment). Lis\u00e4\u00e4 lehtiosastot yhdistelm\u00e4\u00e4n ja tulosta niiden nimet.<br>Java<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">public class Main {<br>public static void main(String[] args) {<br>Osaston talous = uusi talousosasto();<br>Osastomyynti = uusi myyntiosasto();<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    HeadDepartment headDepartment = new HeadDepartment(1, &#034;Company Departments&#034;);\n    headDepartment.addDepartment(finance);\n    headDepartment.addDepartment(sales);\n\n    headDepartment.printDepartmentName();\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u00e4ht\u00f6:<br>Talousosasto<br>Myyntiosasto<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Komposiittikuvion avulla voit luoda joustavia puurakenteita miss\u00e4<br>yksitt\u00e4isi\u00e4 esineit\u00e4 ja koostumuksia (komposiitteja) voidaan k\u00e4sitell\u00e4 yhten\u00e4isesti.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mik\u00e4 on HASH-toiminto!!!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hajautusfunktio on matemaattinen funktio, joka ottaa sy\u00f6tteen (tai &#8220;viestin&#8221;) ja palauttaa kiinte\u00e4n kokoisen merkkijonon,<br>joka on tyypillisesti numeroiden ja kirjainten sarja. T\u00e4t\u00e4 tulostetta kutsutaan &#8220;hash-arvoksi&#8221; tai yksinkertaisesti &#8220;hash-arvoksi&#8221;.<br>Hash-funktioita k\u00e4ytet\u00e4\u00e4n yleisesti tietojenk\u00e4sittelytieteess\u00e4 ja kryptografiassa, ja niill\u00e4 on muutamia t\u00e4rkeit\u00e4 ominaisuuksia:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">=== Miten k\u00e4ytt\u00e4isit hash-funktiota ja miten se toimii?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Deterministinen: Sama sy\u00f6te tuottaa aina saman hashin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nopea: Funktio voi nopeasti laskea hajautusarvon mille tahansa sy\u00f6tteelle.<br>Ainutlaatuinen (melkein): Kahden eri sy\u00f6tteen pit\u00e4isi tuottaa erilliset tiivisteet (t\u00e4t\u00e4 kutsutaan &#8220;t\u00f6rm\u00e4ysten&#8221; minimoimiseksi).<br>Peruuttamaton: Jos tiiviste on annettu, alkuper\u00e4isen sy\u00f6tteen m\u00e4\u00e4ritt\u00e4misen pit\u00e4isi olla laskennallisesti mahdotonta.<br>Tasainen: Hajautusarvot jakautuvat tasaisesti tulostustilaan.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hash-funktioita k\u00e4ytet\u00e4\u00e4n laajasti erilaisissa sovelluksissa, kuten:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tietojen eheys: Varmistaaksesi, ett\u00e4 tietoja ei ole muutettu tai v\u00e4\u00e4rennetty vertaamalla hash-arvoja.<br>Salasanan tallennus: Hajautettujen salasanojen turvallinen tallentaminen todellisten salasanojen sijaan.<br>Kryptografia: K\u00e4ytet\u00e4\u00e4n digitaalisissa allekirjoituksissa ja muissa salausalgoritmeissa.<br>Hash-taulukot: Tehokas tiedonhaku ohjelmoinnissa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">=== Anna esimerkki hash-kartasta, miten k\u00e4ytt\u00e4isit sit\u00e4?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SHA (Secure Hash Algorithm):<br>Sis\u00e4lt\u00e4\u00e4 muunnelmia, kuten SHA-1, SHA-256, SHA-384 ja SHA-512.<br>SHA-256 ja SHA-512 ovat laajalti k\u00e4yt\u00f6ss\u00e4 kryptografiassa ja lohkoketjuteknologiassa (esim. Bitcoin).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">tuonti java.security.MessageDigest;<br>tuonti java.security.NoSuchAlgorithmException;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">public class HashExample {<br>public static void main(String[] args) {<br>kokeile {<br>\/\/ Hajautettava sy\u00f6tt\u00f6merkkijono<br>String input = &#8220;Hei, maailma!&#8221;;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        \/\/ Create a MessageDigest instance for SHA-256\n        MessageDigest digest = MessageDigest.getInstance(&#034;SHA-256&#034;);\n\n        \/\/ Compute the hash\n        byte&#091;] hash = digest.digest(input.getBytes());\n\n        \/\/ Convert the hash bytes to a hexadecimal string\n        StringBuilder hexString = new StringBuilder();\n        for (byte b : hash) {\n            String hex = String.format(&#034;%02x&#034;, b);\n            hexString.append(hex);\n        }\n\n        \/\/ Print the resulting hash\n        System.out.println(&#034;SHA-256 Hash: &#034; + hexString.toString());\n    } catch (NoSuchAlgorithmException e) {\n        System.err.println(&#034;Error: &#034; + e.getMessage());\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sy\u00f6tetiedot: Sy\u00f6temuuttuja sis\u00e4lt\u00e4\u00e4 tiedot, jotka haluat tiivist\u00e4\u00e4.<br>MessageDigest-alustus: MessageDigest-ilmentym\u00e4 luodaan k\u00e4ytt\u00e4m\u00e4ll\u00e4 getInstancea(&#8220;SHA-256&#8221;), joka m\u00e4\u00e4ritt\u00e4\u00e4 SHA-256-hajautusalgoritmin.<br>Hashing: Tiivistelm\u00e4menetelm\u00e4 laskee sy\u00f6tt\u00f6tietojen hajautusarvon.<br>Heksadesimaalimuunnos: Koska hash on bin\u00e4\u00e4rimuodossa, k\u00e4yt\u00e4mme silmukkaa sen muuntamiseen luettavammaksi heksadesimaalimerkkijonoksi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Laita ja Patch? Milloin sit\u00e4 k\u00e4ytet\u00e4\u00e4n?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sek\u00e4 PUT ett\u00e4 PATCH ovat HTTP-menetelmi\u00e4, joita k\u00e4ytet\u00e4\u00e4n palvelimen resurssien p\u00e4ivitt\u00e4miseen, mutta ne eroavat siit\u00e4, miten ne k\u00e4sittelev\u00e4t p\u00e4ivityksi\u00e4:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LAITTAA:<br>T\u00e4ysi p\u00e4ivitys:<br>PUT:ta k\u00e4ytet\u00e4\u00e4n korvaamaan olemassa oleva resurssi kokonaan.<br>Pyynn\u00f6ss\u00e4 on l\u00e4hetett\u00e4v\u00e4 koko resurssi, vaikka vain osa siit\u00e4 muuttuisi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jos resurssia ei ole olemassa, PUT luo sen usein (vaikka t\u00e4m\u00e4 k\u00e4ytt\u00e4ytyminen voi vaihdella).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Idempotentti:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Toistuvat PUT-pyynn\u00f6t samoilla tiedoilla johtavat aina resurssin samaan tilaan.<br>Esimerkki: K\u00e4ytt\u00e4j\u00e4profiilin p\u00e4ivitt\u00e4minen:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">json<br>PUT \/users\/123<br>{<br>&#8220;nimi&#8221;: &#8220;Velislav&#8221;,<br>&#8220;email&#8221;: &#8220;velislav@example.com&#8221;,<br>&#8220;ik\u00e4&#8221;: 30<br>}<br>Jos vain nimi muuttuu, mutta s\u00e4hk\u00f6postiosoite ja ik\u00e4 pysyv\u00e4t samoina, ne on silti sis\u00e4llytett\u00e4v\u00e4 pyynt\u00f6\u00f6n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LAITTEET:<br>Osittainen p\u00e4ivitys:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">PATCHia k\u00e4ytet\u00e4\u00e4n osittaiseen p\u00e4ivitykseen olemassa olevaan resurssiin.<br>Pyynn\u00f6ss\u00e4 tulee l\u00e4hett\u00e4\u00e4 vain muutettavat kent\u00e4t.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Idempotentti (enimm\u00e4kseen):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kuten PUT, toistuvat PATCH-pyynn\u00f6t samoilla tiedoilla johtavat yleens\u00e4 samaan resurssin tilaan.<br>K\u00e4ytt\u00e4ytyminen saattaa kuitenkin riippua palvelimen toteutuksesta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esimerkki: Vain k\u00e4ytt\u00e4j\u00e4nimen p\u00e4ivitt\u00e4minen:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">json<br>PATCH \/users\/123<br>{<br>&#8220;nimi&#8221;: &#8220;Velislav&#8221;<br>}<br>T\u00e4ss\u00e4 vain nimikentt\u00e4 p\u00e4ivitet\u00e4\u00e4n, muut kent\u00e4t eiv\u00e4t muutu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Keskeinen ero:<br>PUT korvaa koko resurssin, kun taas PATCH muokkaa vain tiettyj\u00e4 resurssin kentti\u00e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>HTTP-menetelm\u00e4t lyhyell\u00e4 kuvauksella.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GET: K\u00e4ytet\u00e4\u00e4n tietojen hakemiseen palvelimelta muokkaamatta sit\u00e4. K\u00e4ytet\u00e4\u00e4n yleisesti resurssien tai tietojen hakemiseen.<br>POST: K\u00e4ytet\u00e4\u00e4n tietojen l\u00e4hett\u00e4miseen palvelimelle, tyypillisesti uuden resurssin luomiseen. Esimerkiksi lomakkeen l\u00e4hett\u00e4minen tai tiedoston lataaminen.<br>PUT: K\u00e4ytet\u00e4\u00e4n palvelimella olevan resurssin p\u00e4ivitt\u00e4miseen tai korvaamiseen kokonaan. Jos resurssia ei ole olemassa, se voidaan luoda.<br>PATCH: K\u00e4ytet\u00e4\u00e4n olemassa olevan resurssin osittaisiin p\u00e4ivityksiin, jotka muokkaavat vain m\u00e4\u00e4ritettyj\u00e4 kentti\u00e4.<br>DELETE: K\u00e4ytet\u00e4\u00e4n resurssin poistamiseen palvelimelta.<br>HEAD: Samanlainen kuin GET, k\u00e4ytet\u00e4\u00e4n otsikoiden hakemiseen ilman resurssin runkoa.<br>ASETUKSET: Se kertoo, mitk\u00e4 HTTP-menetelm\u00e4t ovat sallittuja.<br>TRACE: K\u00e4ytet\u00e4\u00e4n p\u00e4\u00e4asiassa diagnostisiin tarkoituksiin toistamalla pyynt\u00f6 takaisin asiakkaalle<br>CONNECT: Muodostaa tunnelin palvelimeen, jota k\u00e4ytet\u00e4\u00e4n usein SSL\/TLS-yhteyksiin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">========== Toiminnallinen k\u00e4ytt\u00f6liittym\u00e4 =====================================<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Javassa toimiva k\u00e4ytt\u00f6liittym\u00e4 on k\u00e4ytt\u00f6liittym\u00e4, joka sis\u00e4lt\u00e4\u00e4 t\u00e4sm\u00e4lleen yhden abstraktin menetelm\u00e4n. N\u00e4it\u00e4 rajapintoja k\u00e4ytet\u00e4\u00e4n ensisijaisesti lambda-lausekkeissa ja menetelm\u00e4viittauksissa, mik\u00e4 mahdollistaa tiiviimm\u00e4n ja luettavamman toiminnallisen ohjelmoinnin.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">T\u00e4rkeimm\u00e4t ominaisuudet:<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Yksitt\u00e4inen abstrakti menetelm\u00e4<\/strong>: Toiminnallisella k\u00e4ytt\u00f6liittym\u00e4ll\u00e4 on vain yksi abstrakti menetelm\u00e4. T\u00e4m\u00e4 on sen toiminnallisuuden ydin.<\/li>\n\n\n\n<li><strong>Oletus- ja staattiset menetelm\u00e4t<\/strong>: Toiminnalliset rajapinnat voivat sis\u00e4lt\u00e4\u00e4 oletus- ja staattisia menetelmi\u00e4, mutta niit\u00e4 ei lasketa yhdeksi abstraktiksi menetelm\u00e4ksi.<\/li>\n\n\n\n<li><strong>@FunctionalInterface Annotation<\/strong>: Vaikka t\u00e4m\u00e4 huomautus on valinnainen, se auttaa osoittamalla, ett\u00e4 k\u00e4ytt\u00f6liittym\u00e4 on tarkoitettu toimivaksi. Jos k\u00e4ytt\u00f6liittym\u00e4\u00e4n lis\u00e4t\u00e4\u00e4n abstrakteja menetelmi\u00e4, k\u00e4\u00e4nt\u00e4j\u00e4 antaa virheilmoituksen.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Esimerkki:<\/h3>\n\n\n<div class=\"wp-block-code\">\n\t<div class=\"cm-editor\">\n\t\t<div class=\"cm-scroller\">\n\t\t\t\n<pre>\n<code><div class=\"cm-line\">@FunctionalInterface<\/div><div class=\"cm-line\">interface Calculator {<\/div><div class=\"cm-line\">    int calculate(int a, int b);<\/div><div class=\"cm-line\">}<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">\/\/ Using lambda expression<\/div><div class=\"cm-line\">public class Main {<\/div><div class=\"cm-line\">    public static void main(String[] args) {<\/div><div class=\"cm-line\">        \/\/ Implementing the calculate method using a lambda<\/div><div class=\"cm-line\">        Calculator addition = (a, b) -&gt; a + b;<\/div><div class=\"cm-line\">        Calculator multiplication = (a, b) -&gt; a * b;<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">        System.out.println(&quot;Addition: &quot; + addition.calculate(5, 3));  \/\/ Output: 8<\/div><div class=\"cm-line\">        System.out.println(&quot;Multiplication: &quot; + multiplication.calculate(5, 3));  \/\/ Output: 15<\/div><div class=\"cm-line\">    }<\/div><div class=\"cm-line\">}<\/div><\/code><\/pre>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\">K\u00e4ytt\u00f6tapaus:<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>Calculator<\/code> esimerkin k\u00e4ytt\u00f6liittym\u00e4ss\u00e4 on yksi abstrakti menetelm\u00e4 <code>calculate<\/code>, mik\u00e4 tekee siit\u00e4 toimivan k\u00e4ytt\u00f6liittym\u00e4n.<br>T\u00e4m\u00e4 antaa meille mahdollisuuden k\u00e4ytt\u00e4\u00e4 lambda-lausekkeita toteutuksen lyhyydeksi ja eleganssiksi.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Yleiset toiminnalliset rajapinnat Javassa:<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Java tarjoaa useita sis\u00e4\u00e4nrakennettuja toiminnallisia rajapintoja <code>java.util.function<\/code> paketteja, kuten:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Predikaatti<\/strong>: ottaa sy\u00f6tteen ja palauttaa loogisen arvon.<\/li>\n\n\n\n<li><strong>Toiminto<\/strong>: Ottaa sy\u00f6tteen ja palauttaa R-tyypin l\u00e4hd\u00f6n.<\/li>\n\n\n\n<li><strong>Toimittaja<\/strong>: Antaa arvon ilman sy\u00f6tt\u00f6\u00e4.<\/li>\n\n\n\n<li><strong>Kuluttaja<\/strong>: Hyv\u00e4ksyy arvon ja suorittaa toiminnon.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Toiminnalliset rajapinnat virtaviivaistavat toimintaa erityisesti sellaisissa tilanteissa, kuten kokoelmien, virtojen tai asynkronisten teht\u00e4vien k\u00e4sittely.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ne antavat Javalle mahdollisuuden omaksua toiminnallisia ohjelmointiparadigmoja s\u00e4ilytt\u00e4en samalla oliosuuntautuneen luonteensa.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">================ korkeamman asteen funktio on ==============================<br>Korkeamman asteen funktio on funktio, joka joko ottaa muita toimintoja argumenteiksi tai palauttaa funktion tuloksena. Toisin sanoen se toimii funktioilla ja kohtelee niit\u00e4 &#8220;ensiluokan kansalaisina&#8221;. T\u00e4m\u00e4 on tehokas ominaisuus toiminnallisissa ohjelmointiparadigmoissa, mik\u00e4 mahdollistaa abstraktion, koodin uudelleenk\u00e4yt\u00f6n ja kokoonpanon.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Esimerkki korkeamman asteen funktiosta Javassa:<\/h3>\n\n\n<div class=\"wp-block-code\">\n\t<div class=\"cm-editor\">\n\t\t<div class=\"cm-scroller\">\n\t\t\t\n<pre>\n<code><div class=\"cm-line\">import java.util.function.Function;<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">public class Main {<\/div><div class=\"cm-line\">    public static void main(String[] args) {<\/div><div class=\"cm-line\">        \/\/ Higher-order function: applies a function to a value<\/div><div class=\"cm-line\">        Function&lt;Integer, Integer&gt; squareFunction = x -&gt; x * x;<\/div><div class=\"cm-line\">        int result = applyFunction(5, squareFunction);<\/div><div class=\"cm-line\">        System.out.println(&quot;Square of 5: &quot; + result);  \/\/ Output: 25<\/div><div class=\"cm-line\">    }<\/div><div class=\"cm-line\"><\/div><div class=\"cm-line\">    public static int applyFunction(int value, Function&lt;Integer, Integer&gt; function) {<\/div><div class=\"cm-line\">        return function.apply(value);<\/div><div class=\"cm-line\">    }<\/div><div class=\"cm-line\">}<\/div><\/code><\/pre>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Yll\u00e4 olevassa esimerkiss\u00e4:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The <code>applyFunction<\/code> Metodi on korkeamman asteen funktio, koska se hyv\u00e4ksyy toisen funktion (<code>Function&lt;Integer, Integer&gt;<\/code>) parametrina.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Ominaisuudet:<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Hyv\u00e4ksyy funktiot argumentteina<\/strong>: Korkeamman asteen toiminnot voivat ottaa muita toimintoja sy\u00f6tteen\u00e4 suorittaakseen tiettyj\u00e4 toimintoja.<\/li>\n\n\n\n<li><strong>Palauttaa funktiot<\/strong>: Ne voivat luoda ja palauttaa uusia toimintoja dynaamisesti.<\/li>\n\n\n\n<li><strong>Kannustaa koodin uudelleenk\u00e4ytt\u00f6\u00e4<\/strong>: Edist\u00e4\u00e4 modulaarista ja uudelleen k\u00e4ytett\u00e4v\u00e4\u00e4 koodia, koska funktioita voidaan siirt\u00e4\u00e4 ja koota yhteen.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">K\u00e4ytt\u00f6tapaus:<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Javassa korkeamman asteen funktioita k\u00e4ytet\u00e4\u00e4n yleisesti toiminnallisessa ohjelmoinnissa virtojen, lambda- ja menetelm\u00e4viittausten kanssa. Esimerkiksi:<\/p>\n\n\n<div class=\"wp-block-code\">\n\t<div class=\"cm-editor\">\n\t\t<div class=\"cm-scroller\">\n\t\t\t\n<pre>\n<code><div class=\"cm-line\">List&lt;String&gt; names = Arrays.asList(&quot;John&quot;, &quot;Jane&quot;, &quot;Jake&quot;);<\/div><div class=\"cm-line\">names.stream()<\/div><div class=\"cm-line\">     .filter(name -&gt; name.startsWith(&quot;J&quot;))  \/\/ Takes a lambda function as argument<\/div><div class=\"cm-line\">     .forEach(System.out::println);         \/\/ Takes a method reference as argument<\/div><\/code><\/pre>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">Korkeamman asteen toiminnot tuovat Java-ohjelmiin joustavuutta ja tehoa, jolloin kehitt\u00e4j\u00e4t voivat kirjoittaa puhdasta, tiivist\u00e4 ja ilmeik\u00e4s koodia!<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">T\u00e4ss\u00e4 joitain tosiel\u00e4m\u00e4n haastatteluvastaussarjoja.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ymm\u00e4rt\u00e4\u00e4 perusasiat, kuten polymorfismi, staattiset menetelm\u00e4t ja String pool<\/li>\n\n\n\n<li>perehtynyt kokoelmiin (esim. HashSet, TreeSet) ja niiden k\u00e4ytt\u00f6tapauksiin.<\/li>\n\n\n\n<li>Tunnistaa oikein papualueet (singleton, prototyyppi)<\/li>\n\n\n\n<li>Tietoinen riippuvuusruiskeesta ja sen tarkoituksesta.<\/li>\n\n\n\n<li>osaa toteuttaa monesta moneen -suhteita liitostaulukoiden avulla.<\/li>\n\n\n\n<li>Ymm\u00e4rt\u00e4\u00e4 indeksien tarkoituksen (tosin pinnallisesti)<\/li>\n\n\n\n<li>osaa erottaa monoliittiset ja mikropalveluarkkitehtuurit<\/li>\n\n\n\n<li>ymm\u00e4rt\u00e4\u00e4 perusratkaisut (skaalautuvuus, yll\u00e4pidett\u00e4vyys)<\/li>\n\n\n\n<li>ymm\u00e4rt\u00e4\u00e4 v\u00e4\u00e4rin Liskovin substituutioperiaatteen ja riippuvuuden inversion<\/li>\n\n\n\n<li>Taistelee tarjota konkreettisia esimerkkej\u00e4 avoimesta\/suljetusta periaatteesta.<\/li>\n\n\n\n<li>Pavun elinkaaren hallinnasta puuttuu syvyytt\u00e4<\/li>\n\n\n\n<li>Ep\u00e4selv\u00e4\u00e4 edistyneen riippuvuuden lis\u00e4yksest\u00e4<\/li>\n\n\n\n<li>pintapuolinen ymm\u00e4rrys indekseist\u00e4 (yhdistelm\u00e4indeksit, kyselyn optimointi)<\/li>\n\n\n\n<li>Ei tunne eristystasoja ja optimistista\/pessimistist\u00e4 lukitusta<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Plussat:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ty\u00f6skenteli vanhan koodin kanssa valtavassa ja monimutkaisessa j\u00e4rjestelm\u00e4ss\u00e4<\/li>\n\n\n\n<li>Tiet\u00e4\u00e4 SOLIDin<\/li>\n\n\n\n<li>Virtojen tuntemus<\/li>\n\n\n\n<li>Selitetty indeksit ja ACID<\/li>\n\n\n\n<li>Hyv\u00e4 englannin taso<br>Miinukset:<\/li>\n\n\n\n<li>Ei vastuuta k\u00e4ytt\u00f6\u00f6notosta tai infrastruktuurista, osallistumisesta arkkitehtuurin suunnitteluun<\/li>\n\n\n\n<li>H\u00e4nell\u00e4 on jonkin verran tietoa OOP:n periaatteista, mutta h\u00e4nell\u00e4 oli todella vaikeuksia selitt\u00e4\u00e4 niit\u00e4 ja h\u00e4n sai joitakin k\u00e4sitteit\u00e4 v\u00e4\u00e4rin<\/li>\n\n\n\n<li>Kokoelmien yleinen tuntemus, mutta siin\u00e4 on aukkoja ja eritt\u00e4in ep\u00e4varma<\/li>\n\n\n\n<li>Ei ymm\u00e4rr\u00e4 samanaikaisuuden ja rinnakkaisuuden eroa, ei kovin vahvaa tiet\u00e4myst\u00e4 samanaikaisuudesta<\/li>\n\n\n\n<li>Ei tutkinut mikropalveluarkkitehtuuria paljon<\/li>\n\n\n\n<li>Ep\u00e4m\u00e4\u00e4r\u00e4inen joistakin tietokantak\u00e4sitteist\u00e4 (keskustelu indekseist\u00e4 oli pintatason)<\/li>\n\n\n\n<li>Livelockia en voinut selitt\u00e4\u00e4<\/li>\n\n\n\n<li>Puutteet est\u00e4v\u00e4t lopulta ymm\u00e4rryksen<\/li>\n\n\n\n<li>Rajoitettu tiet\u00e4mys poikkeusten k\u00e4sittelyn yksityiskohdista<\/li>\n\n\n\n<li>H\u00e4mmentynyt p\u00e4\u00e4syn muokkaajista (suojattu vs. Package Private)<br>Yksimielinen mielipide\u2026 on<br>ei sovellu Mid-Java-kehitt\u00e4j\u00e4paikkaan teknisten tietojensa puutteen vuoksi.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Plussat<br>Selitti SOLID hyvin<br>Selitti OOP hyvin<br>Selitetty kokoonpano (mutta aluksi hieman kamppaili)<br>Erinomainen k\u00e4sitys kokoelmista<br>Ero luetteloiden ja joukkojen v\u00e4lill\u00e4<br>Hashsetit<br>Hashmap<br>SamanaikainenHashmap<br>Tietorakenteiden hyv\u00e4 ymm\u00e4rrys &#8211; pinot, jonot, puut<br>Hyv\u00e4 jvm-arkkitehtuurin tuntemus<br>Selitettiin samanaikaisuus vs rinnakkaisuus, osoitti hyv\u00e4\u00e4 monis\u00e4ikeisten sovellusten tuntemusta<br>Hyv\u00e4 ymm\u00e4rrys REST:st\u00e4<br>Selitti db-indeksit hyvin<br>Selitettiin erilaisia \u200b\u200bliitostyyppej\u00e4<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit\u00e4 ovat SOLID-principleet? Mik\u00e4 on ykhden vastuullisuusperiaate (Single Responsibility Principle, SRP): Luokassa saa olla vain yksi vastuu. rakentajat, getterit ja asettajat} Mik\u00e4 on avoin-suljettu periaate (OCP): Ohjelmistokokonaisuuksien (luokat, moduulit, [&hellip;])<\/p>\n","protected":false},"author":65283547,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1017],"tags":[11788,789678139,2549795,196,789678143],"class_list":["post-2308","post","type-post","status-publish","format-standard","hentry","category-java","tag-haastatella","tag-haastatella-java-kehittaja","tag-java","tag-ohjelmointi","tag-kysymyksia-java-kehittajalle"],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4CoHV-Be","jetpack-related-posts":[{"id":2537,"url":"https:\/\/vkrastev1blog.com\/2026\/10\/02\/%d1%82%d1%80%d0%b5%d1%82%d0%b8%d1%8f%d1%82-%d0%b2%d1%81%d0%b5%d0%bb%d0%b5%d0%bd%d1%81%d0%ba%d0%b8-%d1%81%d1%8a%d0%b1%d0%be%d1%80-%d0%b2-%d0%b5%d1%84%d0%b5%d1%81-431-%d0%b3-%d1%85%d1%80%d0%b8%d1%81\/","url_meta":{"origin":2308,"position":0},"title":"Efesoksen kolmas ekumeeninen kirkolliskokous (431): Kristologinen kiista Kyrillos Aleksandrialaisen ja Nestoriuksen v\u00e4lill\u00e4 ja Jumalan\u00e4idin opin vahvistaminen","author":"vkrastev2014","date":"02.10.2026","format":false,"excerpt":"\u0422\u0440\u0435\u0442\u0438\u044f\u0442 \u0432\u0441\u0435\u043b\u0435\u043d\u0441\u043a\u0438 \u0441\u044a\u0431\u043e\u0440 \u0432 \u0415\u0444\u0435\u0441 (431 \u0433.): \u0445\u0440\u0438\u0441\u0442\u043e\u043b\u043e\u0433\u0438\u0447\u043d\u0438\u044f\u0442 \u0441\u043f\u043e\u0440 \u043c\u0435\u0436\u0434\u0443 \u041a\u0438\u0440\u0438\u043b \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0438\u0439\u0441\u043a\u0438 \u0438 \u041d\u0435\u0441\u0442\u043e\u0440\u0438\u0439 \u0438 \u0443\u0442\u0432\u044a\u0440\u0436\u0434\u0430\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0443\u0447\u0435\u043d\u0438\u0435\u0442\u043e \u0437\u0430 \u0411\u043e\u0433\u043e\u0440\u043e\u0434\u0438\u0446\u0430 \u041d\u0430\u0443\u0447\u043d\u043e-\u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u043e \u0438 \u0431\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u0441\u043a\u043e \u0438\u0437\u0441\u043b\u0435\u0434\u0432\u0430\u043d\u0435 \u0410\u0432\u0442\u043e\u0440: \u0412\u0435\u043b\u0438\u0441\u043b\u0430\u0432 \u041a\u0440\u044a\u0441\u0442\u0435\u0432\u0422\u0435\u043c\u0430: \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043d\u0430 \u0440\u0430\u043d\u043d\u0430\u0442\u0430 \u0426\u044a\u0440\u043a\u0432\u0430 \u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u043d\u0430 \u0445\u0440\u0438\u0441\u0442\u043e\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u0442\u0430 \u0434\u043e\u0433\u043c\u0430\u0442\u0438\u043a\u0430\u041f\u0435\u0440\u0438\u043e\u0434: 428\u2013451 \u0433.\u041e\u0441\u043d\u043e\u0432\u043d\u043e \u0441\u044a\u0431\u0438\u0442\u0438\u0435: \u0422\u0440\u0435\u0442\u0438\u044f\u0442 \u0432\u0441\u0435\u043b\u0435\u043d\u0441\u043a\u0438 \u0441\u044a\u0431\u043e\u0440, \u0415\u0444\u0435\u0441, 431 \u0433. \u0420\u0435\u0437\u044e\u043c\u0435 \u0422\u0440\u0435\u0442\u0438\u044f\u0442 \u0432\u0441\u0435\u043b\u0435\u043d\u0441\u043a\u0438 \u0441\u044a\u0431\u043e\u0440, \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u2026","rel":"","context":"In &quot;Artikkeleita, jotka on omistettu Raamatulle ja hengest\u00e4 ja ruumiista&quot;","block_context":{"text":"Artikkeleita, jotka on omistettu Raamatulle ja hengest\u00e4 ja ruumiista","link":"https:\/\/vkrastev1blog.com\/category\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d0%b8-%d0%bf%d0%be%d1%81%d0%b2%d0%b5%d1%82%d0%b5%d0%bd%d0%b8-%d0%bd%d0%b0-%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d1%8f%d1%82%d0%b0-%d0%b8-%d0%b7%d0%b0-%d0%b4%d1%83%d1%85%d0%b0\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/chatgpt-image-oct-2-2026-08_12_12-pm.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/chatgpt-image-oct-2-2026-08_12_12-pm.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/chatgpt-image-oct-2-2026-08_12_12-pm.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/chatgpt-image-oct-2-2026-08_12_12-pm.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/chatgpt-image-oct-2-2026-08_12_12-pm.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/chatgpt-image-oct-2-2026-08_12_12-pm.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":901,"url":"https:\/\/vkrastev1blog.com\/2024\/11\/17\/%d0%ba%d0%be%d0%bb%d0%ba%d0%be-%d0%bf%d1%80%d0%be%d1%82%d0%b5%d0%b8%d0%bd%d0%b8-%d0%b4%d0%b0-%d0%bf%d1%80%d0%b8%d0%b5%d0%bc%d0%b0%d0%bc%d0%b5-%d0%bd%d0%b0-%d0%b4%d0%b5%d0%bd\/","url_meta":{"origin":2308,"position":1},"title":"Kuinka paljon proteiinia sy\u00f6d\u00e4\u00e4n p\u00e4iv\u00e4ss\u00e4 ja proteiinin n\u00e4l\u00e4nh\u00e4d\u00e4n vaikutukset","author":"vkrastev2014","date":"17.11.2024","format":false,"excerpt":"\u041a\u043e\u043b\u043a\u043e \u043f\u0440\u043e\u0442\u0435\u0438\u043d\u0438 \u0434\u0430 \u043f\u0440\u0438\u0435\u043c\u0430\u043c\u0435 \u043d\u0430 \u0434\u0435\u043d \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0438\u0446\u0438\u0442\u0435 \u043e\u0442 \u043f\u0440\u043e\u0442\u0435\u0438\u043d\u043e\u0432 \u0433\u043b\u0430\u0434 \u041f\u0440\u0438\u0435\u043c\u044a\u0442 \u043d\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u044a\u0447\u043d\u043e \u043f\u0440\u043e\u0442\u0435\u0438\u043d\u0438 \u043d\u0430 \u0434\u0435\u043d \u0435 \u043e\u0442 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0437\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043c\u0430 \u043f\u043e\u0440\u0430\u0434\u0438 \u043d\u044f\u043a\u043e\u043b\u043a\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0438: \u0418\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u0438 \u0432\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0442\u044a\u043a\u0430\u043d\u0438: \u041f\u0440\u043e\u0442\u0435\u0438\u043d\u0438\u0442\u0435 \u0441\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u0438\u0442\u0435 \u0433\u0440\u0430\u0434\u0438\u0432\u043d\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u043d\u0430 \u043c\u0443\u0441\u043a\u0443\u043b\u0438\u0442\u0435, \u043a\u043e\u0436\u0430\u0442\u0430, \u043a\u043e\u0441\u0430\u0442\u0430 \u0438 \u043d\u043e\u043a\u0442\u0438\u0442\u0435. \u0422\u0435 \u0441\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0438 \u0437\u0430 \u0432\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0442\u044a\u043a\u0430\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u2026","rel":"","context":"In &quot;Artikkeleita, jotka on omistettu Raamatulle ja hengest\u00e4 ja ruumiista&quot;","block_context":{"text":"Artikkeleita, jotka on omistettu Raamatulle ja hengest\u00e4 ja ruumiista","link":"https:\/\/vkrastev1blog.com\/category\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d0%b8-%d0%bf%d0%be%d1%81%d0%b2%d0%b5%d1%82%d0%b5%d0%bd%d0%b8-%d0%bd%d0%b0-%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d1%8f%d1%82%d0%b0-%d0%b8-%d0%b7%d0%b0-%d0%b4%d1%83%d1%85%d0%b0\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2024\/11\/image-17.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2024\/11\/image-17.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2024\/11\/image-17.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2024\/11\/image-17.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":2586,"url":"https:\/\/vkrastev1blog.com\/2026\/10\/02\/%d0%b2%d0%b5%d0%bb%d0%b8%d0%ba%d0%b0%d1%82%d0%b0-%d1%81%d1%85%d0%b8%d0%b7%d0%bc%d0%b0-%d0%be%d1%82-1054-%d0%b3-%d0%b8%d1%81%d1%82%d0%be%d1%80%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b8%d1%82%d0%b5\/","url_meta":{"origin":2308,"position":2},"title":"Vuoden 1054 suuri skisma - historialliset syyt ortodoksisen ja roomalaiskatolisen kirkon erolle","author":"vkrastev2014","date":"02.10.2026","format":false,"excerpt":"\u0412\u0435\u043b\u0438\u043a\u0430\u0442\u0430 \u0441\u0445\u0438\u0437\u043c\u0430 \u043e\u0442 1054 \u0433. \u2014 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0442\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0438 \u0437\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u0442\u043e \u043c\u0435\u0436\u0434\u0443 \u041f\u0440\u0430\u0432\u043e\u0441\u043b\u0430\u0432\u043d\u0430\u0442\u0430 \u0438 \u0420\u0438\u043c\u043e\u043a\u0430\u0442\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u0430\u0442\u0430 \u0446\u044a\u0440\u043a\u0432\u0430 \u0420\u0435\u0437\u044e\u043c\u0435 \u0412\u0435\u043b\u0438\u043a\u0430\u0442\u0430 \u0441\u0445\u0438\u0437\u043c\u0430 \u043e\u0442 1054 \u0433. \u0435 \u0435\u0434\u043d\u043e \u043e\u0442 \u043d\u0430\u0439-\u0437\u043d\u0430\u0447\u0438\u043c\u0438\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044f\u0442\u0430 \u043d\u0430 \u0445\u0440\u0438\u0441\u0442\u0438\u044f\u043d\u0441\u0442\u0432\u043e\u0442\u043e. \u0422\u044f \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0441\u0435 \u0441\u0432\u044a\u0440\u0437\u0432\u0430 \u0441 \u043f\u0440\u0435\u043a\u044a\u0441\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0446\u044a\u0440\u043a\u043e\u0432\u043d\u043e\u0442\u043e \u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0420\u0438\u043c\u0441\u043a\u0430\u0442\u0430 \u0446\u044a\u0440\u043a\u0432\u0430 \u043d\u0430 \u0417\u0430\u043f\u0430\u0434 \u0438 \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0438\u043d\u043e\u043f\u043e\u043b\u0441\u043a\u0430\u0442\u0430 \u0446\u044a\u0440\u043a\u0432\u0430 \u043d\u0430 \u0418\u0437\u0442\u043e\u043a. \u0421\u044a\u0431\u0438\u0442\u0438\u044f\u0442\u0430\u2026","rel":"","context":"In &quot;Artikkeleita, jotka on omistettu Raamatulle ja hengest\u00e4 ja ruumiista&quot;","block_context":{"text":"Artikkeleita, jotka on omistettu Raamatulle ja hengest\u00e4 ja ruumiista","link":"https:\/\/vkrastev1blog.com\/category\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d0%b8-%d0%bf%d0%be%d1%81%d0%b2%d0%b5%d1%82%d0%b5%d0%bd%d0%b8-%d0%bd%d0%b0-%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d1%8f%d1%82%d0%b0-%d0%b8-%d0%b7%d0%b0-%d0%b4%d1%83%d1%85%d0%b0\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/qw2qge1gpm-imcejrbliuv09vw-lm2pdjcnyrstfpg4msbjvq5ayy300dumb4g0dqgb04qse4r49kf4hgozsmknaycx-6ls4n1_6et7huoj0n4ovamyps8jiqzamtvq9qa1jdrc-ci-cw5e8oylvd1jxmveqgxdxbfu8ds4uwz8.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/qw2qge1gpm-imcejrbliuv09vw-lm2pdjcnyrstfpg4msbjvq5ayy300dumb4g0dqgb04qse4r49kf4hgozsmknaycx-6ls4n1_6et7huoj0n4ovamyps8jiqzamtvq9qa1jdrc-ci-cw5e8oylvd1jxmveqgxdxbfu8ds4uwz8.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/qw2qge1gpm-imcejrbliuv09vw-lm2pdjcnyrstfpg4msbjvq5ayy300dumb4g0dqgb04qse4r49kf4hgozsmknaycx-6ls4n1_6et7huoj0n4ovamyps8jiqzamtvq9qa1jdrc-ci-cw5e8oylvd1jxmveqgxdxbfu8ds4uwz8.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/qw2qge1gpm-imcejrbliuv09vw-lm2pdjcnyrstfpg4msbjvq5ayy300dumb4g0dqgb04qse4r49kf4hgozsmknaycx-6ls4n1_6et7huoj0n4ovamyps8jiqzamtvq9qa1jdrc-ci-cw5e8oylvd1jxmveqgxdxbfu8ds4uwz8.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/qw2qge1gpm-imcejrbliuv09vw-lm2pdjcnyrstfpg4msbjvq5ayy300dumb4g0dqgb04qse4r49kf4hgozsmknaycx-6ls4n1_6et7huoj0n4ovamyps8jiqzamtvq9qa1jdrc-ci-cw5e8oylvd1jxmveqgxdxbfu8ds4uwz8.jpg?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":2663,"url":"https:\/\/vkrastev1blog.com\/2026\/10\/10\/%d1%81%d1%8a%d0%b1%d1%80%d0%b0%d0%bd%d0%b8-%d0%bb%d0%b8%d0%bd%d0%ba%d0%be%d0%b2%d0%b5-%d0%ba%d1%8a%d0%bc-%d0%b4%d0%be%d0%b1%d1%80%d0%b8-%d1%85%d1%80%d0%b8%d1%81%d1%82%d0%b8%d1%8f%d0%bd%d1%81%d0%ba\/","url_meta":{"origin":2308,"position":3},"title":"Internetist\u00e4 ker\u00e4tty linkkej\u00e4 hyviin kristillisiin elokuviin","author":"vkrastev2014","date":"10.10.2026","format":false,"excerpt":"\u0421\u044a\u0431\u0440\u0430\u043d\u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u0435 \u043a\u044a\u043c \u0434\u043e\u0431\u0440\u0438 \u0425\u0440\u0438\u0441\u0442\u0438\u044f\u043d\u0441\u043a\u0438 \u0424\u0438\u043b\u043c\u0438 \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0422\u0443\u043a \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043c \u0441\u043f\u0438\u0441\u044a\u043a \u0441 \u0434\u043e\u0431\u0440\u0438 \u0425\u0440\u0438\u0441\u0442\u0438\u044f\u043d\u0441\u043a\u0438 \u0424\u0438\u043b\u043c\u0438 \u0434\u043e\u0441\u0442\u044a\u043f\u043d\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442. \u0421\u0442\u0430\u0442\u0438\u044f\u0442\u0430 \u0449\u0435 \u0441\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441 \u043d\u043e\u0432\u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u0435, \u043d\u0435 \u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u0430 \u0441\u0442\u0430\u0442\u0438\u044f. \u0418\u043c\u0430 \u0438 \u0444\u0438\u043b\u043c\u0438 \u0441 \u0431\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438 \u043f\u0440\u0435\u0432\u043e\u0434 \u0438 \u0441 \u0431\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438 \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u0438 \u043d\u043e \u043d\u044f\u043a\u043e\u0438 \u0441\u0430 \u0441\u0430\u043c\u043e \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438 \u0435\u0437\u0438\u043a. \u041f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0442\u0435\u0437\u0438\u2026","rel":"","context":"In &quot;Artikkeleita, jotka on omistettu Raamatulle ja hengest\u00e4 ja ruumiista&quot;","block_context":{"text":"Artikkeleita, jotka on omistettu Raamatulle ja hengest\u00e4 ja ruumiista","link":"https:\/\/vkrastev1blog.com\/category\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d0%b8-%d0%bf%d0%be%d1%81%d0%b2%d0%b5%d1%82%d0%b5%d0%bd%d0%b8-%d0%bd%d0%b0-%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d1%8f%d1%82%d0%b0-%d0%b8-%d0%b7%d0%b0-%d0%b4%d1%83%d1%85%d0%b0\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/films-about-bible-and-jesus.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/films-about-bible-and-jesus.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/films-about-bible-and-jesus.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/films-about-bible-and-jesus.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/films-about-bible-and-jesus.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/films-about-bible-and-jesus.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":2532,"url":"https:\/\/vkrastev1blog.com\/2026\/10\/02\/%d0%b2%d1%82%d0%be%d1%80%d0%b8%d1%8f%d1%82-%d0%b2%d1%81%d0%b5%d0%bb%d0%b5%d0%bd%d1%81%d0%ba%d0%b8-%d1%81%d1%8a%d0%b1%d0%be%d1%80-%d0%b2-%d0%ba%d0%be%d0%bd%d1%81%d1%82%d0%b0%d0%bd%d1%82%d0%b8%d0%bd\/","url_meta":{"origin":2308,"position":4},"title":"Toinen ekumeeninen kirkolliskokous Konstantinopolissa (381) - Pyh\u00e4n Hengen opin vahvistus","author":"vkrastev2014","date":"02.10.2026","format":false,"excerpt":"\u0412\u0442\u043e\u0440\u0438\u044f\u0442 \u0432\u0441\u0435\u043b\u0435\u043d\u0441\u043a\u0438 \u0441\u044a\u0431\u043e\u0440 \u0432 \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0438\u043d\u043e\u043f\u043e\u043b (381 \u0433.) \u2013 \u0443\u0442\u0432\u044a\u0440\u0436\u0434\u0430\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0443\u0447\u0435\u043d\u0438\u0435\u0442\u043e \u0437\u0430 \u0421\u0432\u0435\u0442\u0438\u044f \u0414\u0443\u0445 \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043d\u0430 \u0445\u0440\u0438\u0441\u0442\u0438\u044f\u043d\u0441\u0442\u0432\u043e\u0442\u043e \u2022 \u0412\u0441\u0435\u043b\u0435\u043d\u0441\u043a\u0438 \u0441\u044a\u0431\u043e\u0440\u0438 \u2022 IV \u0432\u0435\u043a \u0412\u0442\u043e\u0440\u0438\u044f\u0442 \u0432\u0441\u0435\u043b\u0435\u043d\u0441\u043a\u0438 \u0441\u044a\u0431\u043e\u0440, \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d \u043f\u0440\u0435\u0437 381 \u0433. \u0432 \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0438\u043d\u043e\u043f\u043e\u043b, \u0435 \u0435\u0434\u043d\u043e \u043e\u0442 \u043d\u0430\u0439-\u0432\u0430\u0436\u043d\u0438\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044f\u0442\u0430 \u043d\u0430 \u0440\u0430\u043d\u043d\u043e\u0442\u043e \u0445\u0440\u0438\u0441\u0442\u0438\u044f\u043d\u0441\u0442\u0432\u043e. \u041d\u0430 \u043d\u0435\u0433\u043e \u0435 \u043f\u043e\u0442\u0432\u044a\u0440\u0434\u0435\u043d\u0430 \u041d\u0438\u043a\u0435\u0439\u0441\u043a\u0430\u0442\u0430 \u0432\u044f\u0440\u0430 \u043e\u0442 325\u2026","rel":"","context":"In &quot;Artikkeleita, jotka on omistettu Raamatulle ja hengest\u00e4 ja ruumiista&quot;","block_context":{"text":"Artikkeleita, jotka on omistettu Raamatulle ja hengest\u00e4 ja ruumiista","link":"https:\/\/vkrastev1blog.com\/category\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d0%b8-%d0%bf%d0%be%d1%81%d0%b2%d0%b5%d1%82%d0%b5%d0%bd%d0%b8-%d0%bd%d0%b0-%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d1%8f%d1%82%d0%b0-%d0%b8-%d0%b7%d0%b0-%d0%b4%d1%83%d1%85%d0%b0\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/ebtppy-v5hhqxqbousaxhde8pmrm8ky9vg5zhq_i42gf-itvech_wr25ui-u_ruov2gkqenknbbx2y7ekwwxzt8559wmlq424iif_pbcon6riek_ttdbxwp75aulyh3_naxhvg_pukcmdvjs88b30esv3xgtigs1gsziujd02gs.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/ebtppy-v5hhqxqbousaxhde8pmrm8ky9vg5zhq_i42gf-itvech_wr25ui-u_ruov2gkqenknbbx2y7ekwwxzt8559wmlq424iif_pbcon6riek_ttdbxwp75aulyh3_naxhvg_pukcmdvjs88b30esv3xgtigs1gsziujd02gs.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/ebtppy-v5hhqxqbousaxhde8pmrm8ky9vg5zhq_i42gf-itvech_wr25ui-u_ruov2gkqenknbbx2y7ekwwxzt8559wmlq424iif_pbcon6riek_ttdbxwp75aulyh3_naxhvg_pukcmdvjs88b30esv3xgtigs1gsziujd02gs.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/ebtppy-v5hhqxqbousaxhde8pmrm8ky9vg5zhq_i42gf-itvech_wr25ui-u_ruov2gkqenknbbx2y7ekwwxzt8559wmlq424iif_pbcon6riek_ttdbxwp75aulyh3_naxhvg_pukcmdvjs88b30esv3xgtigs1gsziujd02gs.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/ebtppy-v5hhqxqbousaxhde8pmrm8ky9vg5zhq_i42gf-itvech_wr25ui-u_ruov2gkqenknbbx2y7ekwwxzt8559wmlq424iif_pbcon6riek_ttdbxwp75aulyh3_naxhvg_pukcmdvjs88b30esv3xgtigs1gsziujd02gs.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/ebtppy-v5hhqxqbousaxhde8pmrm8ky9vg5zhq_i42gf-itvech_wr25ui-u_ruov2gkqenknbbx2y7ekwwxzt8559wmlq424iif_pbcon6riek_ttdbxwp75aulyh3_naxhvg_pukcmdvjs88b30esv3xgtigs1gsziujd02gs.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":297,"url":"https:\/\/vkrastev1blog.com\/2024\/05\/15\/artifitial-eye\/","url_meta":{"origin":2308,"position":5},"title":"Keinotekoinen silm\u00e4 \u2013 kuinka pitk\u00e4lle tiede on p\u00e4\u00e4ssyt vuonna 2026","author":"vkrastev2014","date":"15.05.2024","format":false,"excerpt":"\u0418\u0437\u043a\u0443\u0441\u0442\u0432\u0435\u043d\u043e\u0442\u043e \u043e\u043a\u043e \u2013 \u0434\u043e\u043a\u044a\u0434\u0435 \u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430\u0443\u043a\u0430\u0442\u0430 \u043f\u0440\u0435\u0437 2026 \u0433\u043e\u0434\u0438\u043d\u0430 \u041e\u0442 \u0440\u0435\u0442\u0438\u043d\u0430\u043b\u043d\u0438 \u0438\u043c\u043f\u043b\u0430\u043d\u0442\u0438 \u0434\u043e \u0438\u0437\u043a\u0443\u0441\u0442\u0432\u0435\u043d\u0430 \u0440\u0435\u0442\u0438\u043d\u0430 \u0438 \u0442\u0440\u0430\u043d\u0441\u043f\u043b\u0430\u043d\u0442\u0430\u0446\u0438\u044f \u043d\u0430 \u0446\u044f\u043b\u043e \u043e\u043a\u043e \u0418\u0434\u0435\u044f\u0442\u0430 \u0437\u0430 \u0441\u044a\u0437\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u043a\u0443\u0441\u0442\u0432\u0435\u043d\u043e \u043e\u043a\u043e, \u043a\u043e\u0435\u0442\u043e \u0434\u0430 \u0437\u0430\u043c\u0435\u043d\u0438 \u043d\u0430\u043f\u044a\u043b\u043d\u043e \u0447\u043e\u0432\u0435\u0448\u043a\u043e\u0442\u043e \u043e\u043a\u043e \u0438 \u0434\u0430 \u0432\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u0438 \u0437\u0440\u0435\u043d\u0438\u0435\u0442\u043e \u043d\u0430 \u0441\u043b\u0435\u043f\u0438 \u0445\u043e\u0440\u0430, \u0434\u044a\u043b\u0433\u043e \u0432\u0440\u0435\u043c\u0435 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0435\u0448\u0435 \u043f\u0440\u0435\u0434\u0438\u043c\u043d\u043e \u043d\u0430 \u043d\u0430\u0443\u0447\u043d\u0430\u0442\u0430 \u0444\u0430\u043d\u0442\u0430\u0441\u0442\u0438\u043a\u0430. \u041f\u0440\u0435\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0442\u0435 \u0434\u0435\u0441\u0435\u0442\u0438\u043b\u0435\u0442\u0438\u044f\u2026","rel":"","context":"In &quot;Keinotekoiset elimet \u2013 kuinka pitk\u00e4lle tiede on p\u00e4\u00e4ssyt vuonna 2026&quot;","block_context":{"text":"Keinotekoiset elimet \u2013 kuinka pitk\u00e4lle tiede on p\u00e4\u00e4ssyt vuonna 2026","link":"https:\/\/vkrastev1blog.com\/category\/keinotekoiset-elimet-kuinka-pitkalle-tiede-on-paassyt-vuonna-2026\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2024\/05\/d0bed0bad0be.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2024\/05\/d0bed0bad0be.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2024\/05\/d0bed0bad0be.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2024\/05\/d0bed0bad0be.jpg?resize=700%2C400&ssl=1 2x"},"classes":[]}],"jetpack_likes_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/posts\/2308","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/users\/65283547"}],"replies":[{"embeddable":true,"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/comments?post=2308"}],"version-history":[{"count":6,"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/posts\/2308\/revisions"}],"predecessor-version":[{"id":2314,"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/posts\/2308\/revisions\/2314"}],"wp:attachment":[{"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/media?parent=2308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/categories?post=2308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/tags?post=2308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}