A J# és a .NET
Mint a többi .NET-es nyelvnél (Visual C#, managed C++, VB), a J#nál is adott a lehetőség, hogy
közvetlenül felhasználható legyen egy másik .NET-es nyelven megírt kód. Pl. egy C# nyelvben megírt
osztályból származtatható egy J# osztály.
Kód C#-ban:
namespace Jarmuvek
{
public interface Autopalya
{
void Fizet();
}
public class Auto
{
public string Nev;
public Auto()
{
Nev = "Auto";
}
}
}
Kód J#-ban:
package TomegSzallitok;
//C#-ban implementált osztály importálása
import Jarmuvek.Auto;
// interfész implementálása
public class M1 implements Autopalya
{
protected int autokSzama;
public M1() {}
public void Fizet()
{
autokSzama++;
System.Console.WriteLine("Autópályadíj fizetve");
}
}
// örököltetés
public class Busz extends Auto
{
public Busz()
{
// ososztály adattagja
Nev = "Busz";
}
}
A Java-ból "átvitt" előredefiniált könyvtárakon kívül, .NET Framework osztálykönyvtárai hozzáférhetőek
J#-ból. Ilyen főbb könyvtárak, pl.:
- System.Collections: gyakran használt adattípusok gyűjteménye (pl. lista,
halmaz, tömb, hashtábla, stb.)
- System.Configuration: .NET konfigurációs fájlokhoz való hozzáférést
biztosító osztályok, interfészek
- System.Data: az ADO.NET-nél használatos osztályok (pl. MSSql
adattípusok, Adatábla (DataTable), Adathalmaz (DataSet), relációk, SQL
kapcsolatok (MSSQL, ODBC, OLE DB) stb.)
- System.Drawing: kép, ikon, fonteditáláshoz használatos osztályok
- System.Diagnostics: rendszer processzekkel, esemény naplókkal ill.
teljesítményméréssel foglalkozó osztályok
- System.Globalization: az alkalmazás nemzetközisítésére használatos
osztályok, definíciók (pl. országtól függő információk (pénznem, dátum-,
időformátum), rendezési sorrend ábécé szerint, )
- System.IO: be- és kimenettel kapcsolatos osztályok (pl. fájl- és
könyvtárkezelés, különböző író-, olvasó adatfolyam (stream))
- System.Management: menedzselési információk ill. események a
rendszerről, perifériákról és alkalmazásokról a WMI-ben (Windows Management
Instrumentation)
- System.Messaging: üzenetküldés alkalmazások között (MessageQueue)
- System.Resources: kultúra specifikus adatforrások készíthetőek az
alkalmazások számára
- System.Security: kód alapú biztonsággal kapcsolatos osztályok
- System.Text: különböző szövegkódolások ill. konvertálások (ASCII,
Unicode, UTF-7, és UTF-8)
- System.Threading: párhuzamos programozáshoz szükséges osztályok (pl.
szálak, kölcsönös kizárás, stb.)
- System.Timers: intervallumonként előforduló események előidézésére
használatos időzítök használata lehetséges az itt található osztályokkal
- System.Web, System.Net: Web programozáshoz szükséges osztályok (pl. web
security, kontrollok, protokolok, stb.)
- System.Web.UI: Webes felhasználói interfész megteremtéséhez használatos
kontrollok (ASP.NET server kontrollok és lapok)
- System.Windows.Forms: Windows-os alkalmazásokhoz szüksége grafikus
komponenseket tartalmaz.
- System.Xml: Xml és Xml-alapú (pl. Xslt) dokumentumokat feldolgozó
osztályok
A .NET Framework többi nyelveihez képest az alábbi funkcionalitások nincsenek meg a J#-ban.
- Nincs operátor túlterhelés és az ehhez kapcsolatos .NET Framework szemantikák
- Nincs lehetőség implicit ill. explicit konverziók használatára típusok között
az op_Implicit és op_Explicit operátorokkal.
- Java-beli adattípusok és .NET Framework adattípusok nem feleltethetőek meg
egymással
- Több interfészből való örököltetésnél, ha több interfésznek van ugyanolyan nevű
implementálandó metódusa, akkor azt a J# nem különbözteti meg egymástól, csak
egy implementációt fogad el az összes ugyanolyan nevű metódusra.
Másik módszer a Java-ból .NET-be konvertáláshoz
Az úgynevezett Java Language
Conversion Assistant (JLCA) segítségével a meglévő Java kódok átkonvertálhatóak C#-ba. Ennek
előnye a J#-hoz képest, hogy a C#-ban viszont már elérhető az .NET Framework összes funkcionalitása.
A JLCA a konvertálás közben automatikusan létrehoz a Java kódból egy új C# , ahol hiba adódik 3 féle
megjegyzést tesz:
- UPGRADE_TODO: A kódot nem lehet automatikusan átkonvertálni.
- UPGRADE_WARNING: Az átkonvertált kód problémás lehet.
- UPGRADE_NOTE: A kód hatása eltérhet az eredetitől.
A JLCA konvertálási stratégiája:
Miből
|
Mibe
|
Java-s adattípusok |
.NET adattípusok |
Java Servlet, Java Server Pages |
ASP.NET Web Form |
JSP Tag Libraries |
ASP.NET custom control (egyedi kontrollok) |
Java Beans (Session beans,
Entity beans, Message-driven beans) |
a System.EnterpriseServices megfelelő komponense |
JDBC |
ADO.NET |
JDBC (kivéve javax.sql-t használó kód) |
ADO.NET |
Java RMI, CORBA |
.NET Remoting |
JMS |
Message Queue (MSMQ) |
Java Swing (kivéve PLAF, Layout és Eventing) |
Window Forms (System.Windows.Forms) |
JNDI |
System.DirectoryService |
JAAS |
System.Security |
JCE |
System.Security.Cryptography |
Megjegyzés: ez így mind szép és jó, de ha megpróbáltam bármilyen programot átkonvertálni, ami nem csak néhány
egyszerűbb parancsot tartalmaz, a program (ami tulajdonképpen a Visual Studio egy Add-onja)
már nem tudta hibamentesen átkonvertálni. Mindenesetre innen letölthető
a Hello world! java-s és a JLCA-val átkonvertált C#-os verziója.
Hivtkozások, linkek
Honlapok:
Microsoft J# honlap
www.gotdotnet.com/team/vjsharp
J# cikkek a Microsoft honlapjáról
Fórumok:
www.tek-tips.com
www.dotnetforums.net