Luokkien suunnitteleminen ja käyttäminen
Objektipohjaisessa ohjelmoinnissa (OOP) luokat ovat sovelluksen rakenneosia. Luokkien ja objektien välisen suhteen ymmärtäminen on olennaista.
- Luokat ovat suunnitelmia, joita kehittäjät käyttävät objektien ominaisuuksien (tietojen) ja menetelmien (käyttäytymisen) määrittämiseen. Luokat tarjoavat tavan kapseloida tietoja ja toimintaa, mikä helpottaa koodin järjestämistä ja hallintaa.
- Objektit ovat luokkien esiintymiä. Kun luokka luodaan, objekti luodaan muistiin. Jokaisella objektilla on omat ominaisuus- ja menetelmäjoukkonsa, mutta ne jakavat saman rakenteen, jonka luokka määrittää.
Todellisia objekteja tutkimalla voit ymmärtää, miten luokat ja objektit toimivat ohjelmoinnissa. Reaalimaailman objekteilla on määritteitä (ominaisuuksia) ja käyttäytymismalleja (menetelmiä), jotka määrittävät niiden tarkoituksen ja toiminnallisuuden. Esimerkiksi auto on objekti, joka sisältää määritteitä, kuten merkki, malli ja väri, sekä käyttäytymismalleja, kuten ajamisen ja pysähtymisen.
Reaalimaailman objektit
Ihmiset käyttävät objekteja jatkuvasti arjissaan. Itse asiassa lähes kaikki, mitä käsittelemme, voidaan ajatella objektina.
Seuraavia ehtoja voidaan käyttää objektien määrittämiseen reaalimaailmassa:
- Objektit ovat asioita, joita voimme nähdä ja koskettaa.
- Objekteilla on tarkoitus.
- Objekteilla on osia, jotka tukevat niiden tarkoitusta.
Kynä on esimerkki fyysisestä objektista. Kynän tarkoituksena on luoda huomautus tai piirustus. Kynän osat sisältävät leipätekstin, kärjen ja ehkä pyyhintä. Osat toimivat yhdessä kynälle suunnitellun tarkoituksen saavuttamiseksi.
On myös olemassa fyysisiä objekteja, jotka ovat muiden objektien kokoonpanona. Seuraavassa luettelossa on esimerkkejä objekteista, jotka koostuvat muista objekteista:
- Auto: Auton tarkoituksena on tarjota maakuljetukset henkilöille ja perheille. Auton osat sisältävät moottorin, pyörät, ohjauspyörän ja monia muita. Auton osat toimivat yhdessä maakuljetuksen mahdollistamiseksi.
- Talo: Talon tarkoituksena on tarjota suojaa. Talon osissa on perustus, ulkoseiniä, katto ja huoneet. Nämä osat toimivat yhdessä luodakseen asuintilan.
- Älypuhelin: Älypuhelimen tarkoituksena on auttaa käyttäjää päivittäisissä tehtävissä ja -toiminnoissa. Älypuhelimen osat sisältävät näytön, mikroprosesisorin, muistin ja tallennustilan, akun, kamerat ja painikkeet. Nämä osat toimivat yhdessä mahdollistaakseen viestinnän, viihteen ja tuottavuusominaisuudet.
Jokainen auton, talon tai älypuhelimen osa on objekti, jolla on oma tarkoitus ja joka voi olla myös objektien kokoonpano.
Fyysisen objektin määritteet ja ominaisuudet
Tarkastele kynän esimerkkiä minuutin ajan. Kynällä on osia (runko, kärki, pyyhin) ja tarkoitus (luo huomautus tai piirustus). Kynät jakavat nämä perusominaisuudet. Kaikki kynät eivät kuitenkaan ole samoja.
Jotkut kynät ovat lyhyitä, jotkut pitkiä. Jotkin kynät ovat keltaisia, jotkut mustia. Joissakin kynissä on tylsä vinkki, joissakin terävä kärki. Joissakin kynissä on pyyhin, joissakin ei ole pyyhintä.
Objektin määritteet jaetaan usein seuraaviin fyysisiin ja käyttäytymisluokkiin:
- Fyysinen: Fyysiset määritteet ovat objektin ominaisuuksia, jotka voidaan nähdä tai mitata.
- Behavioral: Käyttäytymismääritteet ovat objektin ominaisuuksia, jotka kuvaavat sen ominaisuuksia tai vuorovaikutusta muiden objektien kanssa.
Kynäesimerkkiä varten fyysisiin määritteisiin sisältyvät leipätekstin pituus, leipätekstin väri, kärjen terävyys ja se, onko kynässä pyyhin. Käyttäytymismääritteitä ovat esimerkiksi kirjoitusmahdollisuus, tyhjentäminen ja teroitusmahdollisuus. Kynä on vuorovaikutuksessa paperin tai muiden kiinteiden objektien kanssa, joita voidaan kirjoittaa tai piirtää.
Fyysisiä määritteitä kutsutaan usein ominaisuuksiksi, kun taas käyttäytymismääritteitä kutsutaan usein funktioiksi (menetelmät C#-ohjelmoinnissa).
C#-ohjelmoinnin koodiluokat ja objektit
C#-ohjelmoinnin maailmassa objektin ominaisuudet ja menetelmät määritetään luokan mukaan. Luokat tarjoavat suunnitelman siitä, mitä objekti (luokan esiintymä) pystyy tekemään. Luokan suunnitelma on luokan määritelmä.
Kun sovellus on käynnissä, tietokone käyttää luokan määritystä muistin varaamiseen objektille (luokan esiintymä). Tietokone käyttää Blueprint-suunnitelmaa määrittääkseen muistilohkon, joka on oikean kokoinen objektille. Objekti on periaatteessa muistilohko.
Koodiobjekteille, aivan kuten fyysisille objekteille, voidaan määrittää eri arvoja.
Luokat tiivistävät tiedot ja käyttäytymisen
Luokat tarjoavat tavan tiivistää tietoja ja käyttäytymistä. Kapselointi on prosessi, jossa tiedot ja toiminta yhdistetään yhdeksi yksiköksi. Luokat käyttävät ominaisuuksia, jotka mahdollistavat tietojen ja menetelmien käytön käyttäytymisen mahdollistamiseksi.
Luokan ominaisuudet
Luokan ominaisuuksien avulla hallitaan tietoja, jotka erottavat yhden objektin (luokkaesiintymän) samantyyppisestä objektista.
Luokan ominaisuudet mahdollistavat sen, että objektit voivat lukea, kirjoittaa tai laskea luokassa määritettyjen muuttujien (tietokenttien) arvon. Ominaisuudet näkyvät julkisina tietojäseninä, mutta ne otetaan käyttöön erityismenetelminä, joita kutsutaan -käyttöoikeuksien. Tämän ominaisuuden avulla soittajat voivat käyttää tietoja helposti ja silti edistää tietojen turvallisuutta ja joustavuutta.
Ominaisuuden arvot voidaan lukea käyttämällä get -käyttöoikeutta ja määrittää käyttämällä set -käyttöoikeutta.
Luokkamenetelmät
Luokkamenetelmät määrittävät toiminnot (toiminnot), jotka luokka voi suorittaa.
Menetelmät voivat ottaa syötetietoja tukevia parametreja ja palauttaa tulostetietoja parametrien kautta. Menetelmät voivat myös palauttaa arvon suoraan ilman parametrin käyttämistä.
Esimerkiksi Console-luokka sisältää (muun muassa WriteLine, ReadLineja Clear menetelmät). Näiden menetelmien avulla voit ottaa käyttöön Console luokan aiotun toiminnan. Menetelmiä voidaan käyttää suorittamaan toimintoja, kuten laskutoimituksia, tietojen käsittelyä tai vuorovaikutusta muiden objektien kanssa.
Menetelmät on usein suunniteltu hyväksymään yksi tai useampi menetelmäargumentti. Menetelmän argumentit välitetään -menetelmään -menetelmän kutsu-lausekkeen parametreina, joita käytetään -menetelmän kutsumiseen. Esimerkiksi WriteLine-luokan Console -menetelmä voi hyväksyä merkkijonoargumentin, joka on kutsuvan lausekkeen tarjoama.
Luokkamääritykset C#-koodissa
Seuraavassa esimerkissä näytetään yksinkertainen luokka C#:ssä.
Phone-luokalla on ominaisuudet kohteille Brand, Modelja Year. Luokka sisältää myös menetelmät Call ja Text.
public class Phone
{
public string? Brand { get; set; }
public string? Model { get; set; }
public int Year { get; set; }
public void Call(string phoneNumber)
{
Console.WriteLine($"Calling {phoneNumber}...");
}
public void Text(string phoneNumber, string message)
{
Console.WriteLine($"Texting {phoneNumber}: {message}");
}
}
Nimitilojen käyttäminen
C#-ohjelmoinnissa nimitiloja käytetään kahdella tavalla:
- .NET-luokan kirjasto järjestää useita luokkia nimitilojen avulla.
- Kehittäjät ilmoittavat omat nimitilansa, joiden avulla voidaan hallita luokan ja menetelmien nimiä suuremmissa ohjelmointiprojekteissa.
Nimitilat .NET-luokan kirjastossa
.NET-luokkakirjasto käyttää nimitiloja toisiinsa liittyvien tyyppien ryhmittelemiseen yhteen, mikä helpottaa niiden löytämistä ja käyttöä.
Katso seuraavaa koodikatkelman esimerkkiä:
System.Console.WriteLine("Hello World!");
Tässä esimerkissä System on nimitila, ja Console on luokka kyseisessä nimitilassa.
Luokan täydellistä nimeä (System.Console) antamalla varmistetaan, että käytetään oikeaa luokkaa. Täydellistä nimeäminen voi kuitenkin olla työlästä, kun käsittelet useita saman nimitilan luokkia. Voit parantaa koodin luettavuutta käyttämällä using -direktiiviä.
using direktiivin avulla voit käyttää nimitilassa määritettyjä tyyppejä määrittämättä kyseisen tyypin täydellistä nimitilaa.
Seuraava koodikatkelma käyttää using -direktiiviä parantaakseen koodin luettavuutta:
using System;
Console.WriteLine("Hello World!");
Muistiinpano
Alkaen kohdasta .NET 6 implisiittisetglobal using -direktiivit lisätään uusiin C#-projekteihin. Tämä tarkoittaa sitä, että voit käyttää näissä nimitiloissa määritettyjä tyyppejä määrittämättä niiden täydellistä nimeä tai lisäämällä using-direktiivin manuaalisesti. Implisiittinen viittaa siihen, että yleiset käyttödirektiivejä lisätään luotuun tiedostoon projektin obj-hakemistossa. Tämän ominaisuuden avulla voit käyttää Console.WriteLine ilmoittamatta eksplisiittisesti using System kehittäessäsi sovelluksia .NET:n versiossa 6.0 tai uudemmassa versiossa.
Luokkien järjestäminen nimitilojen avulla
Omien nimitilojen määrittäminen voi auttaa hallitsemaan luokan ja menetelmien nimien aluetta suuremmissa ohjelmointiprojekteissa. Voit määrittää nimitilan namespace-avainsanan avulla.
Katso seuraavaa koodikatkelman esimerkkiä:
namespace SampleNamespace
{
class SampleClass
{
public void SampleMethod()
{
System.Console.WriteLine("SampleMethod inside SampleNamespace");
}
}
}
Nimitilan nimen on oltava kelvollinen C#-tunnisteen nimi.
Voit määrittää nimitilan kaikille kyseisessä tiedostossa määritetyille tyypeille seuraavassa koodikatkelmassa esitetyllä tavalla:
namespace SampleNamespace;
class SampleClass
{
public void SampleMethod()
{
System.Console.WriteLine("SampleMethod inside SampleNamespace");
}
}
class AnotherSampleClass
{
public void AnotherSampleMethod()
{
System.Console.WriteLine("AnotherSampleMethod inside SampleNamespace");
}
}
Tämän uuden syntaksin etu on, että se on yksinkertaisempi ja säästää vaakasuuntaista tilaa ja hakasulkeita. Tämä helpottaa koodin lukemista.
Nimitilojen yleiskatsaus
Nimitiloilla on seuraavat ominaisuudet:
- He järjestävät suuria koodiprojekteja.
- Ne erotetaan
.-operaattorilla. -
usingdirektiivissä edellytetä, että nimitilan nimi määritetään jokaiselle luokalle. - Yleinen nimitila on päänimitila:
global::Systemviittaa aina .NET-järjestelmän nimitilaan.
Nimitilojen avulla voit ryhmitellä liittyviä tyyppejä yhteen, mikä helpottaa niiden etsimistä ja käyttämistä.