Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Klasskompisar?

Postades av 2003-08-20 23:39:43 - Alexander Zetterlund, i forum vb.net, Tråden har 20 Kommentarer och lästs av 973 personer

HEJ!

Kan man på ett enkelt sätt göra K2 känd i K1?

/Alexander

(kom inte på någon bättre rubrik)


<code>


Main Sub

Dim K1 as new KLASSA
Dim K2 as new KLASSB

End Sub


Public class KLASSA
Public Värde as string
End class


Public class KLASSB
Public Värde as string
End class

</code>


Svara

Sv: Klasskompisar?

Postades av 2003-08-21 09:09:47 - Hobil Haidari

Undersök begreppet Friend eller Public i OO


Svara

Sv: Klasskompisar?

Postades av 2003-08-21 09:31:12 - Andreas Hillqvist

Litet enkelt exempel som visar hur du kan göra:
<code>
Main Sub
Dim K1 as KLASSA = New KLASSA
Dim K2 as KLASSB = New KLASSB
Set K1.Buddy = K2
End Sub

Public class KLASSA
Public Värde as string
Public Buddy As KLASSB
End class

Public class KLASSB
Public Värde as string
End class
</code>
Om du vill endast göra egenskapen läsbar:
<code>
Main Sub
Dim K2 as KLASSB = New KLASSB
Dim K1 as KLASSA = New KLASSA(K2)

End Sub


Public class KLASSA
Public Värde as string
Private mBuddy As KLASSB

Sub New(Buddy As KLASSB)
Set mBuddy = Buddy
End Sub

Public ReadOnly Property Buddy() As KLASSB
Get
Return mBuddy
End Get
End Property
End class

Public class KLASSB
Public Värde as string
End class
</code>

Dett fins ingen skillnad mellan att skriva:
<code>
Dim K2 as New KLASSB
</code>
Och:
<code>
Dim K2 as KLASSB = New KLASSB
</code>
Som jag förståt det. Däremot tycker jag det framkommer tydligare vad man gör om man använder likamed.

Har inte tillgång till VB.NET så jag har ingen möjlighet att testa för syntaxfel. Men principen framgår.


Svara

Sv: Klasskompisar?

Postades av 2003-08-21 09:55:27 - Niklas Jansson

Kan inte VB.Net tillräckligt bra för att uttala mig om något om språket, men rent generellt är det en dålig idé att låta en klass använda en annan på det sättet.

Vad är det du vill uppnå?
Oftast kan det finnas bättre sätt att uppnå det utan att använda friend eller public.


Svara

Sv: Klasskompisar?

Postades av 2003-08-21 10:23:03 - Alexander Zetterlund

Tackar för exemplen och snabba svar!
Det är nog något sådan som jag är ute efter.


Ett litet nytt exempel/fråga:

Min huvudtråd skapar:
100st instanser av klassen RUM
100st instanser av klassen LÅDOR

Nu vill jag att alla instanser av klassen RUM skall kunna komma åt alla instanser av LÅDOR

Hade jag programmerat detta hade RUM skickat en EVENT till huvudtråden som i sin tur hade frågat alla LÅDOR. Sedan skickat svar till LÅDA

Men något kanske har något bättre/riktigare sätt!
Kanske skall göra något liknade som i exemplen i tidigare inlägg?

/Alexander


Svara

Sv: Klasskompisar?

Postades av 2003-08-21 10:56:19 - Andreas Hillqvist

Varför är det dåligt? Vad har du för argument? JAg lyssnar gärna på din åsikt. Men om du bar säger att något är dåligt tycker jag du också skall berätta varför.


Svara

Sv: Klasskompisar?

Postades av 2003-08-21 11:01:48 - Roger Alsing

jag ser inte heller vad som skulle vara dåligt med det..

ta bara windows forms tex.

där har alla kontroller/fönster en publik .Parent property som pekar på ett annat objekt.

//Roger


Svara

Sv: Klasskompisar?

Postades av 2003-08-21 11:05:49 - Roger Alsing

<code>
arraylist lådor =new arraylist();
arraylist rum=new arraylist();
for (int i =0;i<100;i++)
{
Låda l=new Låda();
lådor.add(l);
}

for (int i=0;i<100;i++){
Rum r=new Rum();
r.Lådor=lådor;
rum.add(r);
}
</code>

eller

<code>
arraylist lådor =new arraylist();
arraylist rum=new arraylist();

for (int i =0;i<100;i++)
lådor.add(new Låda());

for (int i=0;i<100;i++)
rum.add(new Rum(lådor));

</code>



det borde väll lösa det hela , utan att skicka några events eller så...

//Roger




Svara

Sv: Klasskompisar?

Postades av 2003-08-21 11:20:50 - Niklas Jansson

>Varför är det dåligt? Vad har du för argument? JAg lyssnar gärna på din åsikt. Men om du bar säger att något är dåligt tycker jag du också skall berätta varför.

Känd OO-princip; ju mer man öppnar åt andra, ju större chans att det blir fel. Låter man bli så mycket öppenhet som möjligt så blir klassena fristående och det ger en stark modularitet, vilket i sin tur gör det lättare att underhålla, utveckla och felsöka. Dessutom blir de återanvändbara.

Men för att återkomma till grundfrågan: Varför vill du att Lådorna skall komma åt Rummen?
ATT låta de komma åt varandra är i sig inget problem, men VARFÖR?
Behövs det verkligen?
Är de så fast knutna till varandra att en förändring i lådor MÅSTE ge upphov till en förändring i rum, och vice versa?


Svara

Sv: Klasskompisar?

Postades av 2003-08-21 11:29:42 - Roger Alsing

<b>Varför vill du att Lådorna skall komma åt Rummen?</b>

-----------------

<b>100st instanser av klassen RUM
100st instanser av klassen LÅDOR

Nu vill jag att alla instanser av klassen RUM skall kunna komma åt alla instanser av LÅDOR</b>

det är väll rummen som ska ha en lista över alla lådor och inte lådorna som ska komma åt rummen?

eller?

//Roger



Svara

Sv: Klasskompisar?

Postades av 2003-08-21 11:34:29 - Niklas Jansson

Jo, visst; ok...
Men frågan kvarstår: varför?
Vad behöver rummen lådorna till?
Är det bara en algoritm är en oo-lösning kanske inte lämplig. Och är en oo-lösning lämplig så bör man överväga om en sån design är nödvändig.


Svara

Sv: Klasskompisar?

Postades av 2003-08-21 11:43:40 - Alexander Zetterlund

Tackar åter för alla snabba svar!

När man som amatör sitter och funderar/testar så blir man lite osäker på om man tänker rätt programmeringsmässigt. Många säger att "Funkar det så är det rätt" men jag vill lära mig att använda allt på rätt/bästa sätt.

Så jag har inget emot att göra som jag har gjort!


Varför lådorna skall komma åt rummen?
Tex ifall lådan vill kolla om det finns ett bättre rum.
Men en sådan grej skull man nog skriva i en ny klass?!


/Alexander

Ps Tycker att det är väldigt bra att man får så mycket hjälp här när man leker som amatör... och utan någon utbildning Ds


Svara

Sv: Klasskompisar?

Postades av 2003-08-21 13:30:48 - Niklas Jansson

Bra att du känner att det är löst, men jag tror ändå att mycket är onödigt hårt kopplat.
Skulle gärna vilja ha en mer utförlig beskrivning på problemet, vad det är du vill uppnå.


Svara

Sv: Klasskompisar?

Postades av 2003-08-21 17:04:50 - Andreas Hillqvist

När en låda behöver veta vilka rum som fins är det väl bättre att skicka med en kollektion med alla rum som ett argument. Detta är väl ett mer objekt orienterat sätt att göra det.


Svara

Sv: Klasskompisar?

Postades av 2003-08-21 17:11:23 - Niklas Jansson

Det mest objektorienterade hade förmodligen varit att inte skicka med nånting till någon av klasserna; att de inte skulle behöva känna till varandra överhuvudtaget; och det är därför jag vill se hela problemställningen.


Svara

Sv: Klasskompisar?

Postades av 2003-08-21 23:46:16 - Alexander Zetterlund

Detta med LÅDOR och RUM är bara ett litet teoretisk exempel. Det jag är ute efter är att lära mig OO-programmering.

Men det vore snällt om någon hade tid att beskriva hur man skulle lösa detta OO.

Skapa 100 RUM
Skapa 100 LÅDOR

LÅDORNA skall flyttas till det lägsta rums nummret om plats finnes.

Kanske ett löjligt exempel men jag kanske lär mig hur man skall lägga upp programmet OO och snyggt.


Svara

Sv: Klasskompisar?

Postades av 2003-08-21 23:49:14 - Andreas Hillqvist

Hur talar du då om till vilket rum en låda hör eller vilka låder som finns i et rum?


Svara

Sv: Klasskompisar?

Postades av 2003-08-22 00:21:43 - Niklas Jansson

Då är första frågan vad som är rimligast; att alla Rum behöver ha vetskap om en Låda eller om varje Låda behöver ha vetskap om ett Rum.

Båda lösningarna är rimliga i varsitt sammanhang. I detta fallet låter det bäst med att Rummen känner till Lådor, men inte vice versa.

Då låter du varje Rum ha en referens till en låda.

Hur du löser
>LÅDORNA skall flyttas till det lägsta rums nummret om plats finnes.
är en helt annan fråga. Är det rimligt att tala om en samling rum, där man sätter in lådor, eller är det en funktion som sätter i lådor i ett givet antal rum.

I och med att problemet är rent hypotetiskt är det svårt att ge argument. Om du kommer med ett "riktigt" exempel är det mycket lättare.


Svara

Sv: Klasskompisar?

Postades av 2003-08-22 16:03:43 - Göran Roseen

Det här var en rolig diskussion!

Det är ofta så att diskussioner om OO har en tendens att bli väldigt filosofiska. "Vet en låda vilket rum den står i?"... "Jag tänker, alltså finns jag"... etc... :-)

Ofta är det nyttigt att jämföra med den verklighet som klasserna skall efterlikna. I så fall kanske varken lådor eller rum vet om varandra (och framförallt, de vet INGENTING om varandras metoder eller implementationer, ett rum kan ju inte flytta på en låda, det är det ju en gubbe (eller gumma) som gör), och istället har du ett dictionary som kopplar rum och lådor till varandra.

Men tänker man lite till så blir det kanske yxigt att programmera (och förstå för den som ska underhålla), och sett i det perspektivet är det väl bäst att t.ex. rummet har en lista på lådor som står i det, samt metoder för att bära in och ut lådor.

Slutligen, om du har miljoner lådor och rum, kanske man av prestandaskäl vill bryta mot "koppla så löst som möjligt"-principen, och även låta varje låda veta vilket rum den står, för att man i själva "affärslogiken" (där man gör något nyttigt med lådor och rum) inte skall behöva göra en dyrbar sökning efter vilket rum en låda står i, om nu logiken kräver det.

/Göran Roseen


Svara

Sv: Klasskompisar?

Postades av 2003-08-25 08:11:49 - Jenny Månsson

Om du tvunget från en Låda vill veta vilket Rum den tillhör så kan du ju lägga på en extra property i klassen låda som heter "Parent" eller "Rum". När du skapar en låda i klassen Låda så skriver du samtidigt vilket rum den tillhör...


Svara

Sv: Klasskompisar?

Postades av 2003-08-25 19:42:49 - Johan Normén

LÅDA
--------------------
string Innehåll
int Size
---------------------


RUM
----------------------------
int Nr
int Size
Lådor[] Lådor
-----------------------------
LäggTillLåda(Låda låda)
----------------------------


vad du nu måste göra är att du skapar 100 unika lådor med olika storlekar, vilket var vad du önskade dig. (Kul uppgift :-) )


Sedan skapa 100 st rum med olika rumsnummer samt storlekar.
Ex Rum[] rum = new Rum[100];

Om du implementerar CompareTo samt Compare metoderna (Använd interface IComparable,IComparer) så kan köra en sorterin efter rummsnummer. Då du själv bygger hur rumen skall sorteras så kan du ju lägga rumet med minst nummer på index 0 och sedan öka. Då är det bara att göra en loop genom alla lådorna och lägga till dem, i din LäggTillLåda kollar du om de får plats, du måste alltså använda dig av Size i båda klasserna för att se så de får plats, då det blir fullt slänger du ut en exception eller struntar i att spara fler lådor.

Om du inte vill köra IComparable,IComparer så kan du ju altid bygga din egna lilla rutin (linjär sökning) som går genom rum efter rum o kollar vilket rum som har minst rumsnummer.

Placerar du dock rumsnummer i storleksordning med en gång (vid skapandet av ett RUM objekt) är det ju ännu lättare att göra det du vill.

//Johan N


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 165
27 952
271 704
1 560
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies