Kirjoittaja: tnb
Kirjoitettu: 21.04.2004 – 21.04.2004
Tagit: koodi näytille, vinkki
Rajapintaohjelmointi on menetelmä, jolla voidaan sovittaa yhteen luokka ja sitä käyttävä koodi, vaikka nillä olisikin käytössä eri muuttuja ja funktio nimet.
Rajapinta vastaa ongelmaan: "Sain kaverilta formin joka tekee homman paremmin kuin oma formini, mutta kaverilla on käytössä toiset funktionimet kuin itselläni ja yhteensovittaminen veisi koko illan".
Rajapinta vastaa myös ongelmaan: "Tein paremman formin kuin kumpikaan kaverini ja he haluaisivat että sovittaisin formini heidän funktionimille. Heillä vaan on käytössä eri nimet ja kahden koodin tekeminen veisi koko illan". Luokka (siis formi) voi siis toteuttaa yhtäaikaa useaa rajapintaa.
Rajapintaa käytettäessä (Form1 koodi) tulee myös rajapinnasta tehdä instanssi(Dim Rajapinta As IFunktio) ja kertoa sille mikä formi on rajapinnan instanssin takana (Rajapinta = formi).
Demossa on:
moduli1 jossa rajapinnan määrittely
form1 jossa painike "Piirrä"
formit PiirraKuvaaja1 ja PiirraKuvaaja2
Demo piirtää parabolin tai sini käyrän sen mukaa kumpaa formia käytetään. Formin vaihto ei aiheuta uudelleen koodausta, vaikka formeissa on eri sisäinen funktionimi piirrolle.
Moduliin
Module RajapintaModuli
'rajapintamäärittely, jota luokat voivat käyttää
'peittääkseen sisäiset funktionsa
Public Interface IFunktio
Function Piirrä() As Double
End Interface
Public Interface IFunktioB ' toinen rajapinta
Function Tulosta() As Double
End Interface
End ModuleForm1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim formi As New PiirraKuvaaja1 ' tehdään instanssi formista "x^2"
'Dim formi As New PiirraKuvaaja2 ' tehdään instanssi formista "sini"
Dim Rajapinta As IFunktio ' tehdään instanssi rajapinnasta
Rajapinta = formi ' liitetään rajapinnan taakse formi
Rajapinta.Piirrä()
'rajapintaa käyttävä koodi on riippumatonta siitä,
'kumpaa formia käytetään
'ja riippumaton myös formien sisäisistä nimistä
End Subformi PiirraKuvaaja1
Public Class PiirraKuvaaja1
Inherits System.Windows.Forms.Form
Implements IFunktio 'käyttää rajapintaa IFunktio
Implements IFunktioB
'..... vakio koodi poistettu
Dim g As Graphics
Dim mustaKynä
Private Sub PiirraKuvaaja1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
g = Me.CreateGraphics
mustaKynä = New Pen(Color.Black)
End Sub
Private Function PiirraParaboli() As Double Implements IFunktio.Piirrä, IfunktioB.Tulosta 'rajapinnan Piirrä funktio korvautuukin tällä
Me.Show()
g.DrawLine(mustaKynä, 10, 110, 210, 110) 'x akseli
g.DrawLine(mustaKynä, 10, 10, 10, 210) 'y akseli
Dim i As Integer
Dim x1, x2, y1, y2 As Double
For i = 0 To 199
x1 = CDbl(i) / 100
x2 = CDbl(i + 1) / 100
y1 = LaskeParaboli(x1)
y2 = LaskeParaboli(x2)
g.DrawLine(mustaKynä, i + 10, CInt(-100 * y1 + 110), (i + 1) + 10, CInt(-100 * y2 + 110))
Next
End Function
Private Function LaskeParaboli(ByVal x As Double) As Double
Return (x - 1) * (x - 1) - 0.5
End Function
End Classformi PiirraKuvaaja2
Public Class PiirraKuvaaja2
Inherits System.Windows.Forms.Form
Implements IFunktio ' käyttää rajapintaa IFunktio
Implements IFunktioB
' .... vakio koodi poistettu
Dim g As Graphics
Dim punaKynä
Private Sub PiirraKuvaaja2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
g = Me.CreateGraphics
punaKynä = New Pen(Color.Red)
End Sub
Private Function PiirraSini() As Double Implements IFunktio.Piirrä, IFunktioB.Tulosta ' tämä korvaa rajapinnan Pirrä funktion
Me.Show()
g.DrawLine(punaKynä, 10, 110, 210, 110) 'x akseli
g.DrawLine(punaKynä, 10, 10, 10, 210) 'y akseli
Dim i As Integer
Dim x1, x2, y1, y2 As Double
For i = 0 To 199
x1 = CDbl(i) / 100
x2 = CDbl(i + 1) / 100
y1 = LaskeSini(x1)
y2 = LaskeSini(x2)
g.DrawLine(punaKynä, i + 10, CInt(-100 * y1 + 110), (i + 1) + 10, CInt(-100 * y2 + 110))
Next
End Function
Private Function LaskeSini(ByVal x As Double) As Double
Return Math.Sin(x * Math.PI)
End Function
End ClassLoistavaa! Vihdoin tajusin, mikä rajapinta on. Kiitos!
juuh, tää näyttää mukavalta koodilta ja hyvä aihevalinta, siitä plussaa, ainut miinus omalla kohdallani on että tämä on tehty .net versioon, sitä alkaa jo vakavasti harkitsemaan .net version hankkimista, paljon muutes .net maksaisi? <---ihan näin offtopickina melkein (hipoo aihetta koska käsittelee .net:iä :] )
Riippuu lisenssistä. Älä missään nimessä osta standardversiota. Siinä ei ole edes optimointi mahdollisuutta(eikä paljon muitakaan herkkuja). Suosittelen Professonalia tai Enterpriseä, vaikka kalliita ovatkin.
Nehän sitten sisältävät kielet vb.net, c++, c#, j#, sekä setupohjelman teko-ohjelman. Lisäksi mahdollisuus yhdistellä näitä kaikkia kieliä helposti(c++ + vb.net = taivas).
peki, juuh kiitos tiedosta :)
täytyy alkaa näköjään tienaamaan rahaa...
vois kyl ruveta miljonääriksi...
Standardiveriso ei tee esim dll:iä mutta asian voi kiertää
https://www.ohjelmointiputka.net/koodivinkit/
On myös yksi ilmainen vaihtoehto, en kyllä tiedä tuosta sen paremmin, kun juuri itse latailen kyseistä ohjelmaa:
http://www.icsharpcode.net/OpenSource/SD/
EDIT: Näyttäisi näin yhtäkkiä olevan lähes suora kopio itse maksullisesta m$:n tuotteesta.