جاوا یک زبان برنامهنویسی سطح بالا و عمومیمنظوره است. از جاوا برای توسعه وب، یادگیری ماشین و سایر توسعههای نرمافزاری پیشرفته استفاده میشود. زبان برنامهنویسی جاوا در ابتدا توسط شرکت سان مایکروسیستمز توسعه داده شد که توسط «جیمز گاسلینگ» آغاز شده بود و در سال 1995 به عنوان یک جزء اصلی از پلتفرم جاوای شرکت سان مایکروسیستمز (Java 1.0 [J2SE]) منتشر شد.
++C یک زبان برنامهنویسی سطح میانی، حساس به حروف کوچک و بزرگ، و شیگرا است. ++C توسط «بیارن استراستروپ» در آزمایشگاههای Bell ایجاد شد. ++C یک زبان برنامهنویسی مستقل از پلتفرم است که بر روی سیستمعاملهای ویندوز، مک و لینوکس اجرا میشود. ++C به سختافزار نزدیک است و امکان برنامهنویسی سطح پایین را فراهم میکند. این ویژگی به توسعهدهنده امکان کنترل بیشتر روی حافظه، عملکرد بهتر و نرمافزار قابلاعتمادتر را میدهد.
این مقاله را مطالعه کنید تا دید کلیای نسبت به ++C و جاوا و تفاوتهای این دو زبان برنامهنویسی پیدا کنید.
جاوا چیست؟
آخرین نسخه منتشر شده از Java Standard Edition، نسخه Java SE 23 است. با پیشرفت جاوا و محبوبیت گسترده آن، پیکربندیهای متعددی برای سازگاری با انواع مختلف پلتفرمها ایجاد شد. برای مثال: J2EE برای برنامههای سازمانی و J2ME برای برنامههای موبایل.نسخههای جدید J2 با نامهای Java SE، Java EE و Java ME به ترتیب بازنامگذاری شدند. جاوا تضمین میکند که برنامهها تنها یک بار نوشته شده و در هر جایی قابل اجرا باشند (Write Once, Run Anywhere).
ویژگیهای جاوا
جاوا دارای ویژگیهای زیر است:
شیگرا (Object Oriented)
در جاوا، همه چیز یک شیء است. جاوا به راحتی قابل گسترش است زیرا بر پایه مدل شیءگرایی ساخته شده است.
مستقل از پلتفرم (Platform Independent)
برخلاف بسیاری از زبانهای برنامهنویسی از جمله C و ++C، زمانی که جاوا کامپایل میشود، به جای تبدیل شدن به کد ماشین خاص یک پلتفرم، به بایتکد مستقل از پلتفرم تبدیل میشود. این بایتکد از طریق اینترنت منتشر میشود و توسط ماشین مجازی جاوا (JVM) بر روی هر پلتفرمی اجرا میشود.
ساده (Simple)
جاوا برای یادگیری آسان طراحی شده است. اگر مفاهیم پایه برنامهنویسی شیگرا را بفهمید، یادگیری جاوا برایتان ساده خواهد بود.
ایمن (Secure)
ویژگیهای امنیتی جاوا اجازه میدهند تا سیستمهای بدون ویروس و دستکاری نشده ایجاد شوند. تکنیکهای احراز هویت بر پایه رمزنگاری کلید عمومی هستند.
معماری-خنثی (Architecture-neutral)
کامپایلر جاوا، یک فرمت فایل شیء مستقل از معماری تولید میکند، که باعث میشود کد کامپایلشده روی بسیاری از پردازندهها قابل اجرا باشد، به شرطی که سیستم اجرایی جاوا نصب شده باشد.
قابل حمل (Portable)
به دلیل مستقل بودن از معماری و نداشتن جنبههای وابسته به پیادهسازی، جاوا قابل حمل است. کامپایلر جاوا با زبان ANSI C نوشته شده و مرزهای قابل حملی پاک دارد که بخشی از استاندارد POSIX است.
مقاوم (Robust)
جاوا با تأکید بر بررسی خطاها در زمان کامپایل و زمان اجرا، سعی دارد از بروز خطاهای رایج جلوگیری کند.
چندنخی (Multithreaded)
با استفاده از ویژگی چندنخی جاوا، میتوان برنامههایی نوشت که بتوانند همزمان چند کار را انجام دهند. این ویژگی به توسعهدهندگان کمک میکند تا برنامههای تعاملی بسازند که روان اجرا میشوند.
تفسیرشده (Interpreted)
بایتکد جاوا به صورت همزمان به دستورالعملهای ماشین محلی ترجمه میشود و جایی ذخیره نمیشود. فرآیند توسعه سریعتر و تحلیلیتر است چون فرآیند لینک کردن سبک و بهصورت مرحلهای انجام میشود.
عملکرد بالا (High Performance)
با استفاده از کامپایلرهای Just-In-Time، جاوا عملکرد بالایی ارائه میدهد.
توزیعشده (Distributed)
جاوا برای محیط توزیعشده اینترنت طراحی شده است.
پویا (Dynamic)
جاوا نسبت به C یا ++C پویاتر محسوب میشود زیرا برای انطباق با محیطهای در حال تغییر طراحی شده است. برنامههای جاوا میتوانند اطلاعات زیادی را در زمان اجرا حمل کنند که میتواند برای بررسی و دسترسی به اشیاء در زمان اجرا استفاده شود.
نمونه برنامه جاوا
به نمونه برنامه ساده جاوا زیر توجه کنید:
package com.tutorialspoint;
import java.util.Scanner;
public class JavaTester {
public static void main(String args[]) {
String a, b;
Scanner scanner = new Scanner(System.in);
System.out.println("Enter The value for variable a");
a = scanner.nextLine();
System.out.println("Enter The value for variable b");
b = scanner.nextLine();
System.out.println("The value you have entered for a is " + a);
System.out.println("The value you have entered for b is " + b);
scanner.close();
}
}
در مثال ما، دو متغیر به نامهای “a” و “b” تعریف کردهایم و به این متغیرها مقداری اختصاص دادهایم. توجه داشته باشید که در جاوا، باید نوع داده (Datatype) متغیرها را بهصورت صریح مشخص کنیم، زیرا جاوا یک زبان با تایپ سختگیرانه (Strictly Typed) است. از آنجایی که جاوا یک زبان شیگرا (Object Oriented) است، برای انجام هر عملی از اشیاء استفاده میکنیم.
در این مثال، از شیء کلاس Scanner برای دریافت ورودی از کاربر از طریق کنسول استفاده شده است که با شیء System.in مشخص میشود. همچنین از متد println() مربوط به شیء System.out برای چاپ مقادیر دریافتی استفاده شده است.
خروجی
در هنگام اجرای این کد جاوا، خروجی به شکل زیر خواهد بود:
Enter The value for variable a
10
Enter The value for variable b
20
The value you have entered for a is 10
The value you have entered for b is 20
++C چیست؟
++C یک زبان برنامهنویسی با تایپ ایستا (Statically Typed)، کامپایلشونده، چندسبکی (Multi-paradigm) و عمومیمنظوره است که یادگیری آن شیب دشواری دارد. این زبان به طور گستردهای در بازیهای ویدیویی، برنامههای دسکتاپ و سیستمهای توکار (Embedded Systems) استفاده میشود. ++C با زبان C بسیار سازگار است بهگونهای که تقریباً تمام کدهای زبان C را بدون تغییر میتوان در ++C اجرا کرد. برنامهنویسی شیگرا باعث میشود ++C ساختار یافتهتر و ایمنتر از C باشد.
ویژگیهای ++C
بیایید به برخی از ویژگیهای ++C و دلایل محبوبیت آن نگاهی بیندازیم:
زبان سطح میانی (Middle-level language)
++C یک زبان سطح میانی است زیرا هم برای توسعه سیستمهای نرمافزاری (مانند سیستمعاملها و درایورها) و هم برای توسعه برنامههای مصرفی گسترده مانند پخشکنندههای رسانه، فتوشاپ، موتورهای بازی و… قابل استفاده است.
سرعت اجرای بالا (Execution Speed)
کد ++C سریع اجرا میشود، زیرا کامپایل میشود و بهطور گستردهای از رویهها (Procedures) استفاده میکند. ویژگیهایی مانند جمعآوری زباله (Garbage Collection)، تایپ پویا (Dynamic Typing) و سایر امکانات مدرن که باعث کندی اجرای برنامه میشوند، در ++C وجود ندارند.
زبان شیگرا (Object-oriented language)
برنامهنویسی شیگرا در ++C انعطافپذیر و قابل مدیریت است. برنامههای بزرگ قابل توسعه هستند. هرچه حجم کد افزایش پیدا کند، مدیریت کدهای رویهای دشوارتر میشود. شیگرایی مزیت کلیدی ++C نسبت به C است.
پشتیبانی گسترده از کتابخانهها (Extensive Library Support)
++C دارای کتابخانهای بسیار گسترده است. همچنین از کتابخانههای شخص ثالث (Third-party Libraries) برای توسعه سریعتر پشتیبانی میکند.
مثال ++C
بیایید با استفاده از مثال زیر با نحوه نگارش (Syntax) زبان ++C آشنا شویم:
#include
using namespace std;
int main() {
int a, b;
cout << "Enter The value for variable a \n";
cin >> a;
cout << "Enter The value for variable b";
cin >> b;
cout << "The value of a is "<< a << "and" << b;
return 0;
}
در مثال ما، ما مقادیر دو متغیر “a” و “b” را از کاربر از طریق صفحهکلید دریافت میکنیم و دادهها را در کنسول نمایش میدهیم.
خروجی
در زمان اجرا، این کد خروجی زیر را تولید خواهد کرد:
Enter The value for variable a
10
Enter The value for variable b
20
The value of a is 10 and 20
مقایسه کامل زبانهای برنامهنویسی Java و ++C 🧠💻
در این بخش قصد داریم یک مقایسه جامع و کامل بین دو زبان برنامهنویسی محبوب Java و ++C ارائه دهیم. این مقایسه از جنبههای مختلف مانند معماری، ویژگیهای فنی، پشتیبانی از مفاهیم شیگرایی، مدیریت حافظه و… صورت گرفته تا دید دقیقی از تفاوتهای اساسی این دو زبان داشته باشیم.
-
توسعهدهنده زبان زبان Java توسط جیمز گاسلینگ در شرکت Sun Microsystems توسعه داده شد و در ابتدا برای سیستمهای تعبیهشده مانند ستتاپباکسها طراحی شده بود. بعدها به یکی از زبانهای اصلی برای توسعه برنامههای تحت وب تبدیل شد. در مقابل، زبان ++C توسط بیارنه استراستروپ در آزمایشگاههای Bell به عنوان توسعهای بر زبان C معرفی شد و توانایی کار با کدهای سطح بالا و پایین را دارد.
-
زبانهای تأثیرگذار زبان Java تحت تأثیر زبانهایی مانند Ada 83، Pascal، C++ و C# قرار دارد. اما ++C از زبانهایی نظیر Ada، ALGOL 68، C، ML، Simula و Smalltalk تأثیر گرفته است.
-
وابستگی به معماری سیستم Java با تولید کد بایتکد و اجرای آن روی ماشین مجازی جاوا (JVM) کاملاً مستقل از معماری سیستمعامل است. در حالیکه ++C به طور مستقیم با سیستمعامل درگیر بوده و برای هر پلتفرم باید مجدداً کامپایل شود.
-
قابلیت اجرا روی پلتفرمهای مختلف Java به صورت کامل پلتفرم مستقل است. یک کد جاوا میتواند بدون تغییر روی هر سیستمعاملی اجرا شود. اما ++C چنین قابلیتی ندارد و برای هر سیستمعامل، نیاز به کامپایل جداگانه دارد.
-
قابلیت حمل (Portability) کدهای نوشته شده در Java میتوانند بدون هیچ تغییری بین سیستمها جابجا شوند. اما در ++C این قابلیت وجود ندارد.
-
مفسری یا کامپایلری بودن Java یک زبان مفسری است که توسط JVM اجرا میشود. اما ++C به صورت کامل کامپایلری بوده و پیش از اجرا باید کامپایل شود.
-
مدیریت حافظه در Java مدیریت حافظه بهصورت خودکار توسط Garbage Collector انجام میشود. ولی در ++C این مسئولیت بر عهده برنامهنویس است که باید حافظه را بهصورت دستی مدیریت کند.
-
کلیدواژه virtual Java از کلیدواژه virtual استفاده نمیکند. در حالیکه در ++C این کلیدواژه وجود دارد و برای پیادهسازی چندریختی (Polymorphism) به کار میرود.
-
پشتیبانی از چندارثبری (Multiple Inheritance) Java تنها از ارثبری تکی پشتیبانی میکند و برای چندارثبری از interface استفاده میکند. اما ++C از ارثبری تکی و چندگانه پشتیبانی کامل دارد.
-
سربارگذاری عملگرها (Operator Overloading) Java از سربارگذاری عملگرها پشتیبانی نمیکند و فقط از سربارگذاری متدها استفاده میشود. ولی ++C قابلیت سربارگذاری هم متدها و هم عملگرها را دارد.
-
استفاده از اشارهگر (Pointer) Java تنها از reference به صورت محدود استفاده میکند و از اشارهگرهای پیچیده پشتیبانی نمیکند. در مقابل، ++C پشتیبانی کامل از اشارهگرها دارد و در برنامهنویسی سطح پایین بسیار قدرتمند است.
-
دسترسی به کد ماشین سطح پایین Java یک زبان سطح بالا بوده و به صورت مستقیم با سختافزار درگیر نمیشود. اما ++C امکان نوشتن کدهای نزدیک به سختافزار را فراهم میکند.
-
دسترسی به کتابخانههای بومی (Native Libraries) Java بهصورت مستقیم از کتابخانههای بومی پشتیبانی نمیکند و باید از ابزارهای جانبی برای این کار استفاده کرد. ولی ++C قابلیت دسترسی مستقیم به کتابخانههای سیستمی را دارد.
-
مستندسازی در کد (Documentation Comments) Java از مستندسازی با استفاده از کامنتهای /** … */ پشتیبانی میکند و ابزار Javadoc برای تولید مستندات استفاده میشود. اما ++C چنین قابلیتی ندارد.
-
پشتیبانی از چندنخی (Multithreading) Java بهصورت پیشفرض از چندنخی پشتیبانی میکند. در حالیکه ++C باید از کتابخانههای جانبی برای ایجاد thread استفاده کند.
-
ورودی از کنسول در Java برای دریافت ورودی از کلاس
System.inاستفاده میشود. اما در ++C از دستورcinبرای دریافت ورودی استفاده میشود. -
خروجی به کنسول برای نمایش خروجی در Java از
System.out.println()و در ++C ازcoutاستفاده میشود. -
پشتیبانی از دامنهی سراسری (Global Scope) Java به دلیل شیگرا بودن کامل، دامنهی سراسری ندارد. اما ++C از دامنهی سراسری و فضای نام (namespace) پشتیبانی میکند.
-
ساختار struct و union Java از ساختارهای
structوunionپشتیبانی نمیکند. اما در ++C این دو ساختار وجود دارند و قابل استفاده هستند. -
کلیدواژه goto Java از
gotoپشتیبانی نمیکند ولی میتوان با استفاده ازlabelوbreak/continueعملکرد مشابه ایجاد کرد. در مقابل، ++C دارای کلیدواژهgotoبرای پرش به نقاط خاصی در برنامه است. -
روش ارسال پارامترها (Pass by) Java تنها از ارسال با مقدار (Pass by Value) استفاده میکند. حتی ارجاع اشیاء نیز بهصورت مقدار ارسال میشود. اما ++C از هر دو روش ارسال با مقدار و ارسال با ارجاع پشتیبانی میکند.
-
مدیریت حافظه اشیاء در Java مدیریت حافظه به صورت خودکار انجام شده و احتمال نشت حافظه بسیار پایین است. در حالیکه در ++C مدیریت حافظه باید بهصورت دستی با استفاده از
newوdeleteانجام شود.