پروگراف

**پروگراف**  یک زبان برنامه‌نویسی تصویری، شی گرا، جریان داده (چند شیوه‌ای) است و به عنوان موفق‌ترین (از لحاظ تجاری) زبان تصویری که چند هدف را دنبال می‌کند، شناخته شده‌است. این موفقیت تجاری به این دلیل است که پروگراف برنامه‌نویس را از کارهای خسته‌کننده و جزئیات غیرضروری زبان‌های رایج آزاد کرده‌است. پروگراف از علامت‌های آیکونی برای نشان دادن عملیاتی که باید روی داده انجام شود، استفاده می‌کند. محیط‌های تجاری توسعه نرم‌افزاری پروگراف مانند Prograph Classic و Prograph CPX طی چند سال برای سیستم عامل‌های مکینتاش و ویندوز موجود بود اما سرانجام در اواخر دهه ۹۰ میلادی از بازار خارج شد. پشتیبانی از زبان پروگراف در سیستم عامل‌های مک اخیراً با انتشار نرم‌افزار محیط توسعه Marten ممکن شده‌ است.

## تاریخچه
تحقیق دربارهٔ پروگراف در سال ۱۹۸۲ در دانشگاه Acadia به عنوان یک تحقیق کلی دربارهٔ زبانهای جریان داده آغاز شد. نمودارهایی که برای روشن‌تر شدن مباحث استفاده می‌شدند منجر به ایجاد این بینش شد که "وقتی نمودارها از کدها واضح ترند چرا نمودارها را قابل محاسبه نکنیم؟" بنابراین پروگراف (برنامه‌نویسی به صورت نموداری) به عنوان یکزبان تصویری جریان داده متولد شد. نوشتن مقاله‌های اولیه به رهبری Dr. Tomasz Pietrzykowski و با همکاری Stan Matwin و Thomas Muldner انجام می‌شد. از سال ۱۹۸۳ تا ۱۹۸۵ نمونه‌های اولیه پژوهش روی یکایستگاه کاری گرافیکی Three Rivers PERQ و یک VAX با یک ترمینال Tektronix و یک کامپایلر آزمایشی که روی یک کامپیوتر شخصی IBM برنامه‌نویسی شده بود، بنا شد. این کار که در دانشگاه صنعتی Nova Scotia توسط Pietrzykowski و Dr. Philip Cox ادامه یافته بود یک نسخه انجام شده روی پرولوگ را شامل می‌شد.

در سال ۱۹۸۵کار روی الگوهای تجاری اولیه برای مکینتاش - تنها کامپیوتر موجود در آن زمان که ارزان و به‌طور گسترده در دسترس بود و از گرافیک سطح بالا پشتیبانی می‌کرد. -آغاز شد. اوایل سال 1986 The Gunakara Sun Systems(که بعداً به TGS Systems تغییر نام داد) تجاری سازی این نمونه را عهده‌دار شد.TGS قبلاً یک شرکت مشاوره در دانشگاه (University Acadia)بود که توسط Pietrzykowski ایجاد شده بود. علاوه بر Pietrzykowski و Cox ,Terry Kilshaw برای مدیریت تیم اصلی و Jim Laskey به عنوان توسعه دهنده رهبر استخدام شدند.در سال ۱۹۸۷ ،Mark Szpakowski ترکیبی از شی گرایی و جریان داده تصویری را پیشنهاد کرد و یک سیستم (objectflow) ابداع کرد. تقریباً ۴ سال بعد از توسعه، اولین نسخه تجاری یعنی V۱.۲ در کنفرانس OOPSLA در New Orleans در اکتبر ۱۹۸۹ معرفی شد. این محصول در سال ۱۹۸۹ جایزه MacUser Editor's Choice را به عنوان بهترین ابزار توسعه یافته برنده شد. نسخه V۲.۰ که در سال ۱۹۹۰ منتشر شد یک کامپایلر به سیستم افزود.

در سال ۱۹۹۰ ،TGS به (Prograph International (PI تغییر نام داد. با آنکه فروش سرعت کمی داشت، توسعه نسخه جدید Prograph CPX (Cross-Platform eXtensions) در سال ۱۹۹۲ در حال انجام بود. این نسخه برای ساخت برنامه‌های کاربردی کاملاً چند سکویی در نظر گرفته شده بود و در سال ۱۹۹۳ منتشر و بلافاصله توسعه یک چارچوب برنامه کاربردی مدل کارخواه کارساز از آن منتج شد. با وجود فروش بالا شرکت قادر به تحمل هزینه‌های عملیاتی نبود. اواخر سال ۱۹۹۴ برای تأمین مالی تلاشهایی ناموفق اوایل ۱۹۹۵ شرکت به امانت (امانت دادگاهی) رفت.پس از به امانت رفتن شرکت مدیران و کارمندان PI یک شرکت جدید به نام Pictorius تشکیل دادند که بدهی‌های PI را تأمین کرد. با گذشت مدت کوتاهی توسعه نسخه ویندوز Prograph CPX آغاز شد. اگرچه این نسخه هرگز به‌طور رسمی منتشر نشد ولی نسخه‌های ویندوز پروگراف به‌طور منظم در دسترس مشتریان Prograph CPX قرار می‌گرفت.

بعد از تغییر مدیریت در شرکت جدید تأکید از توسعه ابزار به توسعه نرم‌افزار کاربردی وب و برنامه‌نویسی سفارشی منتقل شد. در آوریل ۲۰۰۲ بخش توسعه وب شرکت به Paragon Technology Group سپرده شد و به Paragon Canada تغییر نام داد. شرکت McLean Watson Capital (یک شرکت سرمایه‌گذار مستقر در تورنتو که سرمایه زیادی به Pictorius اختصاص داده بود) نام Pictorius و حقوق آن نسبت به کد منبع پروگراف را حفظ کرد. بعدها نسخه ویندوز CPX به‌طور رایگان منتشر شد و برای مدتی از سایت pictorius قابل دانلود بود.اواخر دهه ۱۹۹۰ استفاده کنندگان پروگراف گروهی با نام The Open Prograph Initiativeبا هدف حفظ پروگراف در برابر پیشرفت‌های سیستم‌های اپل و ماکروسافت تشکیل دادند. به علاوه برای مدتی این گروه به دنبال ایجاد یک زبان برنامه‌نویسی تصویری متن باز بود تا جانشین پروگراف شود اما با ظهور محیط برنامه‌نویسی تصویری Marten visual programming مشارکت گروه اساساً متوقف شد.در حال حاضر زبان پروگراف توسط Marten IDE ازAndescotia پشتیبانی می‌شود و به صورت رایگان قابل دانلود است.

## شرح زبان
در دهه ۱۹۷۰ پیچیدگی برنامه به طرز قابل توجهی در حال رشد بود اما ابزارهایی که برای برنامه‌نویسی استفاده می‌شد معمولاً شبیه به همان‌هایی بود که در دهه ۱۹۶۰ استفاده می‌شد. این مسئله به هنگام کار روی پروژه‌های بزرگ منجر به بروز مشکلاتی می‌شد یعنی برنامه آنقدر پیچیده می‌شد که حتی تغییرات کوچک می‌توانست اثرات جانبی داشته باشد که فهم کامل آن‌ها سخت بود. تحقیقات قابل توجه روی این مشکل به این نتیجه رسید که مشکل تمرکز زیاد سیستم‌های برنامه‌نویسی موجود روی منطق برنامه بود در حالیکه در واقع دستکاری داده هدف برنامه محسوب می‌شد. اگر دستکاری داده مهم‌ترین جنبه برنامه است چرا داده «شهروند درجه اول» زبان برنامه‌نویسی نیست؟ با کار بر این مبنا تعدادی سیستم برنامه‌نویسی جدید مانند برنامه‌نویسی شی گرا و برنامه‌نویسی جریان داده ایجاد شدند.پروگراف بیشتر از این مفهوم تأثیر گرفت، ترکیبی از متدهای شی گرا و یک محیط کاملاً تصویری برای برنامه‌نویسی معرفی کرد. در پروگراف اشیاء توسط شش ضلعی‌هایی با دو بخش نمایش داده می‌شوند یکی شامل متغیرها و دیگری شامل روش‌هایی که روی داده‌ها عملیات انجام می‌شود. با کلیک کردن روی هریک از دو بخش، پنجره‌ای باز می‌شود که جزئیات آن شی را نشان می‌دهد. برای مثال باز کردن بخش متغیرها، متغیرهای کلاس را در بالا و متغیرهای نمونه را پایین نشان می‌دهد. باز کردن بخش متدها نحوه پیاده‌سازی متدها در کلاس و به علاوه ارث بری آن‌ها از کلاس بالایی را نشان می‌دهد. وقتی روی یک متد دو بار کلیک شود پنجره دیگری برای نشان دادن منطق متدها باز می‌شود.

در پروگراف متدها به صورت یک سری از آیکون‌ها (که هر آیکون شامل یک یا تعدادی دستورالعمل است) و در هر متد جریان داده‌ها به صورت خطوط در یک گراف جهت دار نمایش داده می‌شود. جریان‌های داده در بالای نمودار از دستورالعمل‌های مختلف عبور می‌کنند و در نهایت از پایین خارج می‌شود (اگر خروجی وجود داشته باشد)

در یک زبان جریان داده هر عملیات به محض آن که ورودی‌های مورد نیاز برای همه اتصالاتش را در دسترس داشته باشد، اجرا می‌شود. این به آن معناست که در این زبانها عملیات می‌توانند هم‌زمان اجرا شوند. زبان‌های جریان داده ذاتاً تمایل دارند هم‌زمان عمل کنند این یعنی آن‌ها طبیعتاً این قابلیت را دارند که روی سیستم‌های چند پردازنده اجرا شوند. این یکی از دلایلی بود که این زبانها در دهه ۱۹۸۰ بسیار مورد علاقه واقع شدند.

برنامه‌ها در پروگراف با کدنویسی کمی ساخته می‌شوند و همین ویژگی پروگراف را به یک زبان ایده‌آل برای نمونه سازی برنامه‌های کاربردی تبدیل می‌کند. سرعت اجرای برنامه قربانی این سهولت استفاده و کارایی نمی‌شود.برنامه پروگراف می‌تواند کامپایل شود و اگر به مقدار کمی سرعت اضافه برای بخش‌هایی که بحران زمانی دارند نیاز داشتیم مجازیم کدهای نوشته شده به یک زبان سطح پایین‌تر مانند C را به برنامه اضافه کنیم.

## اجرا
توسعه یکپارچه پروگراف و همچنین محیط اجرای آن مجاز به دیباگ کردن تصویری هستند و نقاط انفصال (مکان‌های عمدی برای اتمام یا توقف در یک برنامه که برای اهداف دیباگ کردن تعبیه می‌شوند) معمول و مکانیزم‌های تک مرحله‌ای حمایت شده‌اند. هر عملیات در یک برنامه جریان داده وقتی که انجام شود به صورت تصویری هایلایت می‌شود. وقتی که دیباگ کردن تمام شود اگر ماوس روی یک لینک داده قرار بگیرد مقادیر داده به صورت آنی نمایش داده می‌شود. نمایش تصویری محاسبات پشته‌ای برای هر دو نوع محاسبات پیشرو و پسرو مجاز است. برای برخی کاربران جنبه‌های محاسبات تصویری زبان به اندازه امکانات گرافیکی زمان ویرایش مهم است.مهم‌ترین ویژگی زمان اجرای دیباگ کردن امکان تغییر کد حین انجام عمل دیباگ است. این ویژگی باعث می‌شود اشکالات حین انجام دیباگ (اشکال زدایی) رفع شوند و نیازی به کامپایل دوباره نباشد.

## انتقادات
مشکلات زیادی نیز همراه با اجرای متدهای سیستم پروگراف بروز کرده‌اند.کد برنامه پروگراف می‌تواند با استفاده از برچسب گذاری توضیح داده شود. در نسخه‌های اولیه اکثر کلاس‌ها برچسب گذاری نشده بودند. اغلب ارجاع به مستندات برای تعیین ورودی‌های مناسب یک متد، ضروری بود. این مشکل در نسخه‌های بعدی برطرف شد اما هیچ وقت این امکان فراهم نشد که کامنت‌ها توصیف کنند، متد چرا و چگونه کار می‌کنند.برنامه‌نویس بایستی به مسیر یابی اتصالات و کامنت گذاری ورودی‌ها و خروجی‌ها برای مرتب نگه داشتن کد نموداری دقت کند؛ و مشکل دیگر زیاد بودن پنجره‌ها بود به‌طور مثال برای مشاهده محتوای یک متد باید یک پنجره جدید باز شود.

## منابع
* ویکی‌پدیا انگلیسی،Prograph.
* Boshernitsan,Marat;Downes,Michael.''Visual Programming Languages: A Survey''.2004.
* Steinman, Scott B. (1995), "Why do I need Prograph CPX?", *MacTech Magazine*, 11 (7).

رده:زبان‌های برنامه‌نویسی
رده:زبان‌های برنامه‌نویسی شیءگرا
رده:زبان برنامه‌نویسی تصویری