Bilet Skrevet 31. mai 2007 Del Skrevet 31. mai 2007 Hei! Har eksamen i IT VK2 og da Visual Basic over helga, og forberedelsesdag i morra. Alt går som regel fint, men sliter en del med objektorientert programmering. Noen som har kunnskaper rundt dette og kunne skrive meg en liten guide og hjelpe meg til femmeren? Noen som forøvrig har tips rundt hvordan jeg skal løse en eventuell eksamen og små fikse detaljer som kan imponere sensor? Med vennlig hilsen Eirik HADDE VERT SUPERT OM NOEN KUNNE HJELPE ! : ) Lenke til kommentar https://www.diskusjon.no/topic/774741-hjelp-til-objektorientert-programmering/
j000rn Skrevet 31. mai 2007 Del Skrevet 31. mai 2007 Jeg har et bedre forslag. Du starter på en guide. Og så hjelper vi deg å rette opp feil og komme med kommentarer Lenke til kommentar https://www.diskusjon.no/topic/774741-hjelp-til-objektorientert-programmering/#findComment-8752859
Bilet Skrevet 31. mai 2007 Forfatter Del Skrevet 31. mai 2007 Men jeg har ca. ingen kunnskap om emnet. Vet bare at du i Visual Basic kan opprette slike klasser. I disse klassene legger du informasjonen, istedenfor å f.eks legge det direkte i commando-knapp koden eller lignende. Dette for at du skal kunne hente informasjon ut fra klassen. Det hadde vert fint med et eksempel på hvordan en slik klasse kunne fungere? Lenke til kommentar https://www.diskusjon.no/topic/774741-hjelp-til-objektorientert-programmering/#findComment-8753492
aadnk Skrevet 31. mai 2007 Del Skrevet 31. mai 2007 (endret) Et eksempel på en klasse kan være en implementasjon av et Stack-objekt, som mer eller mindre kan sammenliknes med en begrenset form av Collection: Option Explicit ' Her kan du legge variabler (både Private og Public), hvor begge er tilgjengelig for alle ' prosedyrer i klassen, og sistnevnte er tilgjengelig utenfor klasssen. Public Elements As Collection ' Private Elements As New Collection ' Denne metoden kalles når klassen skapes Private Sub Class_Initialize() ' Vi må initialisere Elements da vi ikke har satt New foran Collection Clear End Sub Public Sub Clear() ' Lag en ny instans av klassen Set Elements = New Collection End Sub ' Det er to typer egenskaper, GET og LET, som vist her. GET kalles som vanlige metoder, mens LET kalles ved ' [Navn på klasse].[Navn på egenskap]([Alle paramenter før den siste (vNewValue)]) = [Hva vNewValue skal være] Public Property Get Count(Optional Filler As Variant) As Long ' Returner antall elementer Count = Elements.Count End Property ' Setter antall elementer ved å enten fjerne eller legge til nye Public Property Let Count(Optional Filler As Variant, ByVal vNewValue As Long) ' Fortsett inntil ønsket antall er oppnådd Do Until Count = vNewValue ' Se om vi må legge til eller fjerne If vNewValue < Count Then Pop ' Fjern Else Push Filler ' Legg til End If Loop End Property Public Sub Push(Value As Variant) ' Legger til et nytt element Elements.Add Value End Sub Public Function Pop() As Variant ' Returnerer verdien av det siste elementet Pop = Peek ' Fjerner det siste elementet Elements.Remove Count End Function Public Function Peek() As Variant ' Henter verdien av det siste elementet uten å fjerne det Peek = Elements.Item(Count) End Function ' Denne metoden kalles når klassen frigis (eksempelvis når en variabel settes til Nothing eller ' når den går ut av "scope") Private Sub Class_Terminate() ' Rydder opp Set Elements = Nothing End Sub Når du har lagd inn koden ovenfor i en klassemodul med navn Stack, kan du bruke den f.eks. som følger: Private Sub Form_Load() Dim Test As New Stack, Result As String ' Legg til objekter Test.Push "OOP " Test.Count("er ") = 2 ' Vil legge til èn "er " Test.Push "svært " ' Fjern og vis det siste elementet MsgBox Test.Pop ' Bare vis element nummer to MsgBox Test.Peek ' Legg til et nytt element Test.Push "interessant." Do Until Test.Count = 0 Result = Result & Test.Pop Next ' Vis alle elementer MsgBox Result End Sub Endret 31. mai 2007 av aadnk Lenke til kommentar https://www.diskusjon.no/topic/774741-hjelp-til-objektorientert-programmering/#findComment-8753964
Bilet Skrevet 31. mai 2007 Forfatter Del Skrevet 31. mai 2007 Takk. Vet ikkje heilt om eg forstod. . .men trur eg skjønner noko. Del ting eg ikkje har høyrt om, men får sjå når eg kjem på skulen i morra, og hadde vore fint om du kunne svippa innom i løpet av morradagen? Såg på sida di no. . . du har laga mykje bra. Har du nokre program som har litt simple OO i seg? Lenke til kommentar https://www.diskusjon.no/topic/774741-hjelp-til-objektorientert-programmering/#findComment-8754042
aadnk Skrevet 31. mai 2007 Del Skrevet 31. mai 2007 Har du nokre program som har litt simple OO i seg? 8754042[/snapback] Nesten alle de nyeste programmene benytter OOP (den nyeste er helt nederst på siden), men jeg tror ikke noen av dem har klasser som er enklere enn eksempelet mitt ovenfor. Lenke til kommentar https://www.diskusjon.no/topic/774741-hjelp-til-objektorientert-programmering/#findComment-8754072
Bilet Skrevet 1. juni 2007 Forfatter Del Skrevet 1. juni 2007 Nei, så at dette var en smule simplere. Men sånn generelt, om jeg forstår det rett. Så bare definerer du hva noe skal gjøre i klassen, enten det gjelder en funksjon med et = eller bare en egenskap? Dette kan du så igjen, for å gjøre form koden med oversiktlig og ha fin struktur hente ut igjen der du trenger det så lenger du viser til klassen as New? Eller er jeg helt på viddene. Merker selv at det er VELDIG vanskelig å forklare OOP. Lenke til kommentar https://www.diskusjon.no/topic/774741-hjelp-til-objektorientert-programmering/#findComment-8757853
GeirGrusom Skrevet 1. juni 2007 Del Skrevet 1. juni 2007 Objektorientering er ikke så komplisert. Tror jeg skrev en lang forklaring engang, men jeg husker ikke hvor, så jeg skriver en ny en. Sammenlign objektorientering med dyre, eller planteliv. Se på et menneske som en klasse (Public Class Human) Mennesker har et slektstre (Inherits Monkey) og en rekke egenskaper og evner. La oss kalle navn for en egenskap (Public Property Name() As String) Siden aper ikke har navn (ihvertfall ikke seg imellom) så sier vi at Navn er en ny egenskap hos mennesker. Men hva hvis styrke er en egenskap? aper har også styrke, og da vil automatisk også mennesker ha styrke, men kanskje med andre verdier. Man kan også ha evner, f.eks. evnen til å løpe(Public Sub Run()), eller snakke(Public Sub Talk(output As String)). Både mennesker og aper kan løpe, men bare mennesker kan snakke, dermed er snakke en ny egenskap hos mennesker. Samme reglene gjelder, stort sett, bortsett fra i .NET programmering har vi en hendig mekanisme som heter Interfaces, det interfaces gjør, er å garanetere at en klasse implementerer en rekke funksjoner, metoder, felt, egenskaper eller hendelser. men tilbake til saken; forskjellen på en instance og en deklerasjon? en instance er når klassen er tatt i bruk, og deklerasjonen er "design" Se på forskjellen som forskjellen mellom en husplantegning, og et ferdigbygget hus. Public Class Monkey Private m_height As Double Private m_birth_day As DateTime Public Property Height() Get() Return m_height End Get End Property Public Property BirthDay() As DateTime Get() Return m_birth_day End Get End Property Public Sub Run() ChangeWalkMode(WalkModes.Run) End Sub End Class Public Class Human Inherits Monkey Private m_name As String Public Property Name() As String Get() Return m_name End Get Set(value As String) m_name = value End Set End Property Public Sub Talk(string say_what) AudioVideo.SoundPlayer.Play(AudioVideo.Soundbank.GenerateAudioObject(say_what)) End Sub End Class Public Static Class MainClass Public Static Sub Main() Dim my_monkey As Monkey my_monkey = New Human() Console.WriteLine(my_monkey.Height) Console.WriteLine(my_monkey.Name) ' Ikke definert i Monkey klassen Console.WriteLine(CObj(my_monkey).Name) ' Definert i Human End Sub End Class Lenke til kommentar https://www.diskusjon.no/topic/774741-hjelp-til-objektorientert-programmering/#findComment-8758340
aadnk Skrevet 1. juni 2007 Del Skrevet 1. juni 2007 På overflaten er klassemoduler helt lik vanlige moduler i det at de kan inneholde prosedyrer, funksjoner og deklarasjoner (variabler, konstanter, API), men i tillegg kan de også holde ulike verdier i variablene samtidig ved forskjellige instanser. Ta eksempelet ovenfor. Du kan lage to forskjellige Stack-objekter, men med de samme funksjoner og metoder, ved å deklarere variabelen to ganger: Dim A As New Stack, B As New Stack ' Legg til verdier A.Push "Hei" B.Push "Hallo" Her vil A og B være den samme modulen med den samme koden, men Elements-variabelen i hver vil være forskjellig. Dette kan man ikke oppnå med vanlige moduler. Det er for øvrig lurt å lage uavhengige moduler (noe en oppnår ganske lett med OOP) og abstraksjoner bort mye av de tekniske implementasjonsdetaljene slik at de individuelle delene av programmet kan brukes igjen uten modifikasjon. Ta Stack-objektet mitt - den kan jeg bruke i hvilket som helst program uten å endre på noe, og, dersom jeg ikke liker å bruke Collection-objektet som datakonteiner, kan jeg godt endre dette til f.eks. en Array uten at det påvirker kode som bruker den. Dette er for øvrig noe av tankegangen bak Interfaces (eller grensesnitt) - at objekter har veldefinerte metoder som godt kan implementeres annerledes men som gjør hva en forventer. Det er selvsagt mye mer til OOP enn dette (interfaces, polymorphism), men du kan godt konsentrere deg om hva jeg nevnte ovenfor i første omgang. Lenke til kommentar https://www.diskusjon.no/topic/774741-hjelp-til-objektorientert-programmering/#findComment-8758501
aadnk Skrevet 1. juni 2007 Del Skrevet 1. juni 2007 Nå som GeirGrusom har forklart hvordan man bruker Interfaces i VB .NET, kan jeg godt komme med koden for dette i VB6. Legg følgende kode inn i en klassemodul kalt IStack: Public Sub Clear()End Sub Public Property Get Count(Optional Filler As Variant) As Long End Property Public Sub Push(Value As Variant) End Sub Public Function Pop() As Variant End Function Public Function Peek() As Variant End Function Legg så til Implements IStack øverst i Stack og endre Clear til IStack_Clear, Get Count til Get IStack_Count, Push til IStack_Push, Pop til IStack_Pop og Peek til IStack_Peek. Fordelen her er du nå kan bruke alle objekter som implementerer IStack PÅ SAMME MÅTE. Selv om jeg nå lager et ny StackExtended-objekt som også støtter en Item-egenskap, kan jeg, om den støtter IStack, bruke den på akkurat samme måte. Hvis du kombinerer dette, slik som det har blitt gjort svært mye i .NET, får du et svært kraftig rammeverk. Lenke til kommentar https://www.diskusjon.no/topic/774741-hjelp-til-objektorientert-programmering/#findComment-8758570
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå