در تپش این هفته، ماجرای فریب و تعرض در پوشش عرفانهای دروغین و رمالی را بررسی کردیم
البته در این تعریف توافق کمی وجود دارد و بهسختی میتوان به تعریفی دقیق و جامع رسید، چرا که معنای برنامهنویسی خودکار در طول زمان تغییر کرده است.
دیوید پارناس2، یکی از ارکان اساسی پنهانسازی اطلاعات در برنامهنویسی ماژولار، تاریخچه این واژه را بررسی و اشاره کرده است که در دهه 40 میلادی، برنامهنویسی خودکار به مکانیزهکردن امور لازم برای سوراخکردن کاغذهای کد میگفتند. اما بعدها به ترجمه زبانهای برنامهنویسی سطح بالایی چون فورترن3 و الگول4 اطلاق شده است. در حقیقت، یکی از نخستین کامپایلرهای دنیا، بهنام اتوکد5 ایجاد شده بود.
دیوید پارناس همچنین نتیجهگیری کرده است که:«برنامهنویسی خودکار همواره تعبیر یک زبان سطحبالاتر بهزبانی سطح پایینتر بوده که برای برنامهنویس سادهتر باشد.»
1. برنامهنویسی نسلی
برنامهنویسی نسلی6 نوعی از برنامهنویسی کامپیوتر است که طی آن، خودش اقدام بهتولید کد منبع برنامه میکند. این تولید بهکمک استفاده از جنریکها7، فریمها8، کلاسها، الگوها9 و دیدگاهها10 انجام میشود و باعث بالارفتن میزان بهرهوری میگردد. در مباحث استفاده مجدد از کد، به شیوه تولید خودکار کد، گاه به «مهندسی نرمافزار مولفهمحور11» و «مهندسی خانواده محصول12» نیز نسبت داده میشود.
2. تولید کدمنبع
تولید کدمنبع، یعنی عمل ایجاد کد منبع بر مبنای مدلی آنتولوژیک13 مانند یک الگو که با یک ابزار برنامهنویسی مثل پردازنده الگو یا محیط توسعه یکپارچه ((IDE14 همراه باشد. این ابزارها توسعه کد منبع را بهمقاصد مختلفی انجام میدهند. برای مثال، یکی از مفاهیم پایه برنامهنویسی خودکار، پردازنده ماکرو در زبان C است که بهسادگی کد منبع را با ماکروهای نوشته شده در کد جایگزین میکند و قوانین سادهای دارد.
پیادهسازی
محیطهای توسعه یکپارچهای چون Interface Builder(برای سیستمهای Mac OS X ) و یا مایکروسافت ویژوال استودیو (برای سیستمهای ویندوزی) شکلهای پیشرفتهتر و پیچیدهتری از تولید خودکار کد را انجام میدهند، در آنهابرنامهنویس میتواند بهصورت تعاملی و پویایی تکهکدهای منبع خود را ایجاد یا ویرایش کند.
ویزاردهای برنامه بهسادگی و با محیطی گرافیکی بهبرنامهنویس اجازه میدهند رابط کاربری مورد نظر خود را ایجاد کند و کامپایلر بهصورت نامرئی کدمنبع لازم برای ایجاد آن رابط کاربری را تولید کند. اینها هم شکل دیگری از تولید خودکار کد بهشمار میروند.
صرفنظر از تولید کد بر مبنای ویزارد یا الگو، محیطهای توسعه یکپارچه همچنین کد را ریفاکتور15 میکنند تا در مقابل وقوع خطا مقاومسازی شود، این روند اگر بهروش دستی انجام شود، وقت بیشتری را صرف میکند.
مزایای تولید خودکار کد
تولید کد فقط سرعت کدنویسی را بالا نمیبرد. بلکه چهار امتیاز برجسته نسبت به تولید کد بهروش دستی دارد:
الف) کیفیت: تولیدکنندههای کد از الگوهایی برای کدهای لازم استفاده میکنند. بنابراین هر چه این الگو بهتر باشد، کد خروجی بهتر خواهد بود. بنابراین تنها کافی است برای بالابردن کیفیت الگوهای کد تلاش کرد تا تاثیر آن را در تمام کد منبع یک نرمافزار مشاهده کرد.
ب) ثبات: کلاس، متدها و نامگذاری متغیرها در این روش ثبات بیشتری دارد و باعث میشود از رابط کاربری راحتتر استفاده کرد. همچنین امکان افزودن کدهای تولیدی دیگری روی نرمافزار فعلی سادهتر خواهد بود.
پ) بهرهوری: این عامل رابطه مستقیم با مهارت تولیدکننده کد دارد تا بتواند با تغییراتی در کد، کل پروژه را بهسمتی برساند که به ذهن برنامهنویس نزدیکتر شود.
ت) تجرید: تولیدکنندههایی که نیازهای لازم یک نرمافزار را داخل بستری خاص نگهمیدارند (مثلا بهشکل دیتابیس یا فایل (XML از زبان پیادهسازی فاصله میگیرند و بهتجرید نزدیکتر میشوند. بههمین جهت میتوان مطالعه بعدی روی تمام پروژهرا صرفنظر از زبان پیادهسازی و شیوه آن انجام داد و در صورت لزوم تغییرات را روی آنها اعمال کرد.
معایب تولید خودکار کد
درست مانند هر تکنیک دیگر، تولید کد نیز معایب خود را دارد. از مهمترین دغدغههایی که در بحث تولید خودکار کد وجود دارد، بهترتیب زیر است:
تولیدکنندههای کد معمولا غیرقابل تعمیرند و بههمین دلیل مهندسان نرمافزار از آن دوری میکنند. همچنین گاهی اوقات کد تولیدی بسیار پیچیده میشود و مرور و رفع عیب آن بهمراتب دشوارتر و وقتگیرتر از حالت دستی است.
چند مثال از نرمافزارهای برنامهنویس خودکار
Altova MapForce
ابزار یکپارچهسازی، تبدیل و نگاشت داده که قادر بهتولید کد بهزبانهای جاوا، C# یا C++ است.
NConstruct
ابزاری است برای پیادهسازی نرمافزارها با معماری توسعه سریع، در محیطهای وب یا ویندوز و تحت محیط .NET فعالیت میکند و کد تولیدی آن، بهزبان C# است و با ویزاردهای ساده خود، تمام کدهای لازم برای نرمافزار را تولید میکند.
MyGeneration
تولیدکننده کد برمبنای الگوهاست که برای داتنت فریمورک مایکروسافت نوشتهاند.
Ebenezer Eterprises
سرویس آنلاینی است که عملیات مارشالکردن کد را بهزبان C++ انجام میدهد.
LatticeFramework Studio
ابزار توسعه سریع نرمافزار بر مبنای مدل و الگو است که برای محیط داتنت نوشته شده است. این ابزار کدهایی بهزبانهای C#، VB.NET، جاوا، PHP و دیاگرامها و مستندات را طی پروسههای ویزاردی بسیار ساده تولید میکند.
MyProLang
ابزار تولید خودکار کد است که برمبنای الگو فعالیت میکند و میتواند از رابط کاربری تا کدهای عملیاتی را ایجاد کند و در یک برنامه اجرایی دیگر کامپایل شود.
Viewpoints
ابزاری برای مدلسازی تصویری و تولید کد برای ویژوالاستودیو داتنت است که محوریت فعالیتهای تجاری و مولفههای مرتبط را مدنظر قرار داده است.
منابع
http://www.codegeneration.net/files/.1
.pdf1JavaOne_OnePageGuide_v
wiki/Automatic
_programming|
-programming.org/
پینوشتها
Automatic Programming.1
David Parnas.2
Fortran.3
Algol.4
AutoCode.5
Generative Programming.6
7. Generics: شیوهای در برنامهنویسی که در آن الگوریتمها به نوع «بعدا معرفی خواهد شد» پیادهسازی میشوند.
8. Frames: نوعی فناوری در تولید نرمافزار است که بهکمک بلوکهایی از پیشساخته، کدهای لازم را ایجاد میکند.
Templates.9
Aspects.10
Component-Based Software Engineering.11
Family-Based Engineering.12
13. Ontological: آنتولوژیک یعنی شکل ظاهری مجموعهای از مفاهیم مرتبط با یکدیگر در یک دامنه مشخص.
Integrated Development Environment.14
15. Refactor: تغییر ساختار درونی برنامه، بدون آنکه در رفتار و عملکرد آن تاثیر داشته باشد.
امیربهاالدین سبطالشیخ
در تپش این هفته، ماجرای فریب و تعرض در پوشش عرفانهای دروغین و رمالی را بررسی کردیم
گزارش «جامجم» درباره دستاوردهای زبان فارسی در گفتوگو با برخی از چهرههای ادب معاصر
معاون وزیر بهداشت: