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 Module
Form1
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 Sub
formi 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 Class
formi 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 Class
Loistavaa! 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.