رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران

بهنام صباغی

مدیـــــر کل سایــــت
  • تعداد ارسال ها

    30
  • تاریخ عضویت

  • آخرین بازدید

  • روز های برد

    11

آخرین بار برد بهنام صباغی در 20 تیر

بهنام صباغی یکی از رکورد داران بیشترین تعداد پسند مطالب است !

اعتبار در سایت

27 عالی

درباره بهنام صباغی

توسعه‌ دهنده بَک اِند
توسعه‌ دهنده فرانت اِند
میانجی گر‌ها
  • تاریخ تولد 12 مهر 1374

اطلاعات شبکه‌ای

موقعیت

  • شهر
    محلات

آخرین بازدید کنندگان نمایه

بلوک آخرین بازدید کننده ها غیر فعال شده است و به دیگر کاربران نشان داده نمیشود.

  1. بهنام صباغی

    در این پست قصد دارم به توضیح کد بخش VTK در مثال استفاده از VTK با Qt در گیتهاب بپردازم. از فایل VTKmain.h شروع میکنم : #include "qobject.h" #include "vtkCubeSource.h" #include "vtkOrientationMarkerWidget.h" #include <QVTKWidget.h> #include <vtkActor.h> #include <vtkAxesActor.h> #include <vtkDataSetSurfaceFilter.h> #include <vtkIdFilter.h> #include <vtkOBJReader.h> #include <vtkPLYReader.h> #include <vtkPolyDataMapper.h> #include <vtkProperty.h> #include <vtkRenderWindow.h> #include <vtkRenderer.h> #include <vtkSmartPointer.h> #include <vtkSphereSource.h> در بخش بالا کتابخانه های مورد نیاز در پروژه اینکلود شدند . یک سری از این کتابخانه‌ها مثل #include "qobject.h" کتابخانه‌های کیوت هستند. و یک سری کتابخانه‌ها که در اسم آن‌ها VTK به چشم می‌خورد کتابخانه‌های VTK هستند. برای اطلاعت بیشتر از هرکدام از این کتابخانه‌ها می‌توانید نام آن را جستجو کنید و به داکیومنت VTK برای آن کتابخانه و همچنین سورس آن کتابخانه دست یابید. بخش دوم کد : class VTKmain : public QVTKWidget { public: VTKmain(QWidget *parent = nullptr); ~VTKmain(); // vtk renderer vtkSmartPointer<vtkRenderer> renderer; vtkSmartPointer<vtkPolyDataMapper> mapper; vtkSmartPointer<vtkActor> actor; public slots: }; در این بخش یک کلاس به اسم VTKmain ساخته شده است و از QVTKWidget به ارث برده که یک کتابخانه توسعه داده شده توسط توسعه‌دهندگان VTK برای تعبیه کردن صفحه سه بعدی VTK در رابط کاربری گرافیکی Qt است. درون کلاس هم سه تعریف داریم که در فایل سورس بیشتر در مورد آنها توضیح خواهم داد. توضیحات فایل VTKmain.cpp : همانطور که مشاهده می کنید در این مثال ساده فقط در تابع سازنده کد نوشته شده است : VTKmain::VTKmain(QWidget *parent) : QVTKWidget(parent) در دو خط زیر پنجره را به اندازه مورد نظر ریسایز می‌کنیم و حداقل سایز پنجره را مشخص می‌کنیم : resize(1920, 1000); setMinimumSize(400, 200); در خط زیر با استفاده از vtkSmartPointer یک نمونه از vtkRenderer میسازیم و در اشاره‌گر هوشمند VTK که با اسم renderer در هدر تعریف کردیم میریزیم این روند کلی ایجاد یک شی با استفاده از اسمارت پوینتر VTK است و برای بقیه کلاس‌ها هم به همین منوال عمل می‌کنیم : renderer = vtkSmartPointer<vtkRenderer>::New(); در خط 19 رنگ پس‌زمینه را تنظیم می‌کنیم مقادیر ورودی این تابع بین 0 و 1 هستند و نشانگر استاندارد رنگی قرمز-سبز-آبی است : renderer->SetBackground(0, 0, 0); در خط 20 پنجره رندر از کلاس (به ارث برده شده از QVTKWidget ) را می‌گیریم و رندرر را به آن اضافه میکنیم : GetRenderWindow()->AddRenderer(renderer); در خط 22 و 23 یک مکعب ایجاد می‌کنیم : vtkSmartPointer<vtkCubeSource> cube = vtkSmartPointer<vtkCubeSource>::New(); در خط 26 یک نمونه برای mapper ایحاد می‌کنیم : mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); در خط 27 پورت خروجی مکعب را به اتصال ورودی mapper می‌دهیم : mapper->SetInputConnection(cube->GetOutputPort()); در خطوط 29 تا 32 یک اکتور ایجاد کرده و mapper را که در بالا ساختیم برای ان تنظیم می‌کنیم و اندازه‌ی نقاط را برای ان تنظیم می‌کنیم و در خط 32 رنگ آن را تنظیم می‌کنیم : actor = vtkSmartPointer<vtkActor>::New(); actor->SetMapper(mapper); actor->GetProperty()->SetPointSize(1000); actor->GetProperty()->SetColor(1, 1, 0); //(R,G,B) در خط 33 این اکتور را به رندرر اضافه می‌کنیم : renderer->AddActor(actor); در خطوط 35 و 36 یک نمونه از axes برای نمایش جهت در کنار صفحه به صورت سه بعدی ایجاد می‌کنیم : vtkSmartPointer<vtkAxesActor> axes = vtkSmartPointer<vtkAxesActor>::New(); در خطوط 38 و 39 یک ویوپورت برای نمایش این جهت‌نما درست می‌کنیم چون نمیخواهیم با جابجایی سه بعدی صحنه این جهت‌نما از گوشه پنجره نکان بخورد و حرکت انتقالی در سه بعد داشته باشد: vtkSmartPointer<vtkOrientationMarkerWidget> axesViewPort = vtkOrientationMarkerWidget::New(); در خطوط 41 تا 46 به ترتیب رنگ دور ویوپورت ، اکتور جهت نمایش ، اینتراکتور رندر ویندو ، اندازه و مکان دو بعدی ویو پورت در صفحه ( بین پراپرتی‌ها بین 0 و 1 هستند ) ، فعال بودن و تعاملی بودن را تنظیم می‌کنیم که این گزینه آخر در صورت فعال بودن این امکان را به کاربر می‌دهد که با موس ویوپورت ساخته شده را جابجا کند : axesViewPort->SetOutlineColor(0.9300, 0.5700, 0.1300); axesViewPort->SetOrientationMarker(axes); axesViewPort->SetInteractor(GetRenderWindow()->GetInteractor()); axesViewPort->SetViewport(0.9, 0.0, 1.0, 0.1); axesViewPort->SetEnabled(1); axesViewPort->InteractiveOff(); در خط 48 مکان دوربین فعال را تنظیم می‌کنیم : renderer->GetActiveCamera()->SetPosition(1000, 2500, 1000); در خط 49 تابع رندر از رندرر را صدا زده : renderer->GetActiveCamera()->SetPosition(1000, 2500, 1000); و در خط 50 تابع ریست دوربین رندرر را صدا میزنیم تا تغییراتی که انجام دادیم قابل مشاهده شوند : renderer->ResetCamera();
  2. بهنام صباغی

    کتابخانه VTK یک کتابخانه مجسم سازی سه بعدی اطلاعات و پردازش تصویر است. این شامل یک کتابخانه کلاس C++ و چندین لایه رابط تفسیری از جمله Tcl / Tk، Java و Python است. VTK یک کتابخانه کراس پلتفرم است که از سیستم‌عامل‌های لینوکس ، یونیکس ، مک و ویندوز پشتیبانی می‌کند. این ابزار پشتیبانی از پردازش موازی و ادغام با پایگاه های داده های مختلف در ابزارهای GUI مانند Qt و Tk را داراست. در سایت رسمی این کتابخانه به آدرس VTK - The Visualization Toolkit می‌توانید منابع آموزشی متعددی برای یادگیری این کتابخانه پیدا کنید. برای استفاده از این کتابخانه نیاز به کامپایل سورس این کتابخانه داریم . برای دریافت سورس میتوانید از صفحه دانلود سایت رسمی VTK استفاده کنید. بعد از دریافت این کتابخانه میتوانید با توجه به سیستم‌عامل خود از صفحه wiki سایت رسمی VTK برای تنظیم و کامپایل این کتابخانه استفاده کنید. دقت نمایید اگر نیاز دارید که از فریمورک Qt در برنامه خود استفاده کنید و صفحات گرافیکی VTK را در پنجره‌های Qt نمایش دهید باید به این مرحله پیکربندی با Cmake که مرتبط به کیوت 5 می‌باشد دقت کنید. بعد از کامپال و نصب کتابخانه میتوانید پروژه مثال استفاده از VTK و Qt در گیتهاب را اجرا کرده و صحیح بودن پیکربندی و ساخت کتابخانه را آزمایش کنید. برای یادگیری این کتابخانه میتوانید از کتاب یا ویدئو های موجود استفاده کنید ولی روش شخصی بنده برای یادگیری و استفاده از این کتابخانه در پروژه مشاهده و تحلیل مثال‌های کتابخانه VTK بود. این مثال ها جزء به جزء برای هر قابلیت پیاده سازی شده‌اند. در قسمت بعد روند کلی کارکرد این کتابخانه از روی سورس مثال معرفی شده از گیتهاب را برای شما عزیزان شرح می‌دهم.
  3. بهنام صباغی

    مروی بر مهندسی نرم افزار ( قسمت پنجم )

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

    مروی بر مهندسی نرم افزار ( قسمت چهارم )

    طرح‌های راهبردی مهندسی نرم‌افزار : نمونه اولیه ( Proposal ) نقشه مدیریت پروژه ( Project Management Plan ) طرح تضمین کیفیت ( Quality Assurance Plan) یافتن واقعیت‌ها در سیستم نرم‌افزاری مصاحبه کاربران بیشتر به نتایج توجه دارند نه منشا کارها کاربران ناآگاهند نسبت به سیستم‌های کامپیوتری تناقض‌گویی کاربراان ارائه راهکار از طرف کاربر پرسش‌نامه : وقتی افراد زیاد و زمان کم است از پرسش‌نامه استفاده می‌کنیم. مطالعه مشاهده مدل خطی مهندسی نرم‌افزار سوال : چه زمانی از مدل خطی استفاده می‌شود ؟ جواب : نیازمندی‌های سیستم از ابتدا به طور کامل مشخص باشد. نکته : اگر نیازمندی‌ها از اول مشخص نباشد این مدل کارایی ندارد و همچنین این مدل زمان زیادی می‌گیرد. نمونه اولیه ( prototype ) : شنیدن صحبت‌های مشتری طرح اولیه نشان دادن ماکت به مشتری چالش‌های نمونه اولیه ( prototype ) : سادگی بیش از حد نمونه اولیه باعث منصرف شدن کاربر می‌شود. خواسته‌های غیر منطقی و خارج از چارچوب برنامه ایجاد شود. RAD ( Rapid Application Development ) توسعه سریع برنامه : تقسیم برنامه به ماژول‌های مختلف تخصصیص هر ماژول به یک تیم هر یک از مدل خطی استفاده می‌کنند. نکته 1 : نرم‌افزار باید قابلیت تقسیم به ماژول های مختلف را داشته باشد. نکته 2 : هزینه ترکیب کردن ماژول‌ها زیاد است. مدل افزایشی مهندسی نرم‌افزار ( Incremental Model ) هر بخش از نرم افزار توسط یک تیم نوشته می‌شود. ( بخش‌ها از یکدیگر مستقل‌اند) مدل پیچشی مهندسی نرم‌افزار هر بار نرم‌افزار بزرگتر می‌شود تا به نرم‌افزار اصلی برسیم. مشکل : اگر کاربر مشکلی پیدا کند باید به اول برگردیم. مدل برد برد ( Win Win Model ) همان مدل پیچشی و ساختار آن به گونه‌ای است که هر موقع کاربر درخواستی داشته‌باشد به چرخه برگشته و درخواست را عملی می‌کنیم.(یک پیچ به عقب بر می‌گردیم) متدلوژی SSADM ( Structured System Analysis & Design Method ) چرخه حیات متدلوژی SSADM هر بخش به صورت مجزا دیده می‌شود و هیچ ارتباطی باهم ندارند. امکان‌سنجی : این می‌باشد که آیا قابلیت انجام این پروژه توسط شرکت وجود دارد یا خیر ؟ فنی : سخت‌افزار یا نرم‌افزار خاصی نیاز داریم که باید بررسی شود که در اختیار داریم یا خیر ؟ مالی : به صرفه بودن پروژه و نرم‌افزار و بررسی کردن آن زمان : آیا زمان لازم برای انجام پروژه وجود دارد یا خیر ؟ هزینه : زمانی می‌تواند به عنوان هزینه در نظر گرفته شود زمان وجود دارد اما زمانی که برای پروژه در نظر گرفته می‌شود میتوان با توجه به پروژه ‌ای دیگر و زمان کمتر سود بهتری بدست آورد. مراحل امکان‌سنجی : شناخت محدوده پروژه : قسمت‌های مختلف یک پروژه را شناسایی می‌کنیم به عنوان مثال در سیستم انبارداری سیستم خرید ، سیستم فروش ، سیستم نگهداری بررسی و شناخت وضعیت موجود : بررسی وضعیت موجود در شرکتی که قرار است برای آن‌ها برنامه نوشته شود و بررسی میکنیم که آن‌ها چه وضعیتی دارند و یا از چه برنامه‌هایی قبلا کمک می‌گرفتند خروجی این بررسی گزارش تفضیلی شناخت پروژه می‌باشد. بررسی و تحلیل اهداف سیستم جدید : ویژگی‌هایی که قرار است اضافه شود تعیین موجودیت‌های خارج از سیستم تعیین محدودیت‌ها و مخاطرات سیستم : ریسک‌های سیستم و مشکلات آن را پیدا کنیم و ... به تایید کارفرما رساندن محدوده پروژه ارائه راه‌حل‌های سخت افزاری و نرم‌افزاری : پروژه به چه سخت‌افزار و نرم‌افزارهایی نیاز دارد. بررسی اقتصادی پروژه : هزینه تهیه کامپیوتر و سخت‌افزارهای مورد نیاز و بررسی به صرفه بودن هزینه تهیه سیستم‌های کامپیوتری ( سخت افزار ) هزینه منابع انسانی و آموزش افراد و استخدام برنامه‌نویس هزینه پشتیبانی از برنامه گزارش امکان‌سنجی مستنداتی قابل ارائه از امکان‌سنحی متدلوژی و راه و روشی برای شناخت سیستم راه‌حل‌های ارائه شده به کارفرما که پذیرفته شده‌است. بررسی اقتصادی هزینه‌های پروژه و مزایای پروژه برنامه‌ریزی برای پروژه ( زمان‌بندی و افرادو ... ) نتیجه‌گیری و پیشنهادات ضمایم تکمیلی ( مواردی که به پروژه ضمیمه می‌شوند ) 5 گام اساسی متدلوژی SSADM مدل آبشاری متدلوژی SSADM
  5. بهنام صباغی

    مروی بر مهندسی نرم افزار ( قسمت سوم )

    طرح مسئله در مهندسی نرم‌افزار : از طرف مشتری اعلام شود. از طرف مهندسان نرم‌افزار پیشنهاد می‌شود. proposal : شرکت مهندسی نرم‌افزار آن را ارائه می‌دهد ک در آن نشان می‌دهد که چگونه پروژه طرح مسئله شده را انجام می‌دهد . مواردی که در proposal موجود است : دامنه ، تعریف مسئله و حدود و ثغور (حوزه‌های مسئله ) تهیه شرح کاملی از مسئله تهیه اهداف (اطلاعاتی که سیستم فراهم می‌کند) تعیین بودجه تعیین منابع برای اجرای پروژه زمان بندی انجام پروژه (gantt chart) جلسه Kickoff meeting جلسه ارائه طرح «این جلسه بعد از اتمام قرارداد می‌باشد.» دو طرف روبروی هم می‌نشینند (حالت معارفه دارد). موفقیت و شکست نرم‌افزار : بین 60٪ تا 70٪ پروژه های نرم‌افزاری به دلایلی همچون تغییر مدیر پروژه ، استفاده نکردن از آن نرم‌افزار ، ناتوانی در کدنویسی برنامه و ... شکست می‌خورند . یکی از دلایل استفاده نکردن از نرم‌افزار مقاومت در مقابل تغییرات است . راهکارهایی که مقاومت در بربر تغییرات را کاهش می‌دهند عبارتند از : آموزش درگیر کردن افراد نظام تنبیه و پاداش نکته : هر سه مورد نیاز به حمایت مدیر ارشد دارند . چرخه حیاط نرم‌افزار : دیاگرام متن (Context Diagram) : یک دیاگرام که در متدولوژی SSADM از آن استفاده می‌شود . هدف : تمام موجودیت‌ها ، تمام عناصر و سیستم‌ها را مشخص می‌کند. عناصر : پرسنل / مدیریت سازمان موجودیت‌های خارجی : شعب بانک سیستم‌ها : سیستم حسابداری/سیستم مالی نمادها : سیستم را با مستطیل نشان می‌دهند موجودیت ها را با دایره نشان می‌دهند جریان اطلاعات را با فلش نشان می‌دهند مستند سازی دیاگرام : دیاگرام جدول شرح موجودیت‌های خارجی جدول شرح ارتباطات مثال : داروخانه بیمارستان را در نظر بگیرید . نسخه های بیماران توسط مشتری از طرف بخش بیمارستان به داروخانه ارسال می‌شوند و فاکتور تحویل دارو پس از تسویه حساب با مشتری به بخش ارسال می‌شود . جهت تامین دارو ، داروخانه از شرکت‌های دولتی و خصوصی استفاده می‌کند . روال ارتباط با این دو شرکت متفاوت است . در ارتباط با شرکت‌های دولتی داروخانه لیست داروهای مورد نظر را ارسال کرده و پس از دریافت لیست داروهای موجود و فاکتور فروش مبلغ را پرداخت می‌کند. در ارتباط با شرکت های خصوصی لیست داروهای موجود ارسال نمی‌شود در ضمن داروهای دریافتی به انبار داروخانه تحویل داده شده و رسید آن به داروخانه ارسال می‌گردد. هم چنین ارتباط داروخانه با حسابداری به شرح زیر است : نسخه ها و فاکتورها روزانه برای حسابداری ارسال می‌شود و جهت تامین دارو لیست نیازمندی‌ها و قیمت‌ها ارسال شده و چکی در وجه داروخانه دریافت می‌شود . دیاگرام : جدول شرح موجودیت‌ها : جدول ارتباطات : نکته : جدول ارتباطات این مثال تکمیل نیست و فقط یک مورد به عنوان مثال آورده شده سعی کنید با توجه به صورت مسئله بقیه ارتباطات را بنویسید .
  6. این جزوه طراحی تحلیل سیستم ها که دم دستم بود البته دارم توی یک مجموعه پست هم دسته بندی میکنم و سعی میکنم یک مقداری با توضیحات خودم واضح ترش کنم و منتشر کنم اینم اولین قسمتشه این هم لینک دانلود جزوه : Systems-Design-and-Analysis.pdf
  7. بهنام صباغی

    مروی بر مهندسی نرم افزار ( قسمت دوم )

    تحلیلگرهای مهندسی نرم‌افزار : تحلیل‌گر سطح 1 تحلیل سیستم 30٪ کدنویسی 70٪ تحلیل‌گر سطح 2 تحلیل سیستم 50٪ کدنویسی 50٪ تحلیل‌گر سطح 3 تحلیل سیستم 70٪ کدنویسی 30٪ تحلیل‌گر ارشد تحلیل سیستم 60٪ کدنویسی 10٪ مدیریت پروژه 30٪ تعریف سیستم : به مجموعه‌ای از عناصر گفته می‌شود که کنار هم قرار گرفنه‌اند ، دارای ورودی‌های مشخص ، پردازش‌های معین و خروجی از پیش تعیین‌شده برای یک هدف خاص هستند . سیستم : سیستم باز : تبادل داده ، ماده و انرژی با محیط اطراف . سیستم بسته : با خارج از خود ارتباط ندارد . هم‌افزایی (synergy ) : ماهیت یک سیستم بالاتر از جمع جبری تک تک عناصر آن سیستم است . طراحی سلسله مراتبی ساختار سیستم : سطح‌های مدیریتی : نکته : ساخت نرم‌افزار یک فرآیند تکراری است . Process ( فرآیند) : انجام دادن یک سری گام ، کار و یا وظیفه در یک زمان مشخص برای رسیدن به یک هدف مشخص وظیفه زمان هدف Functions (وظیفه ) : ثبت نام در دانشگاه : امور مالی امور آموزشی امور اداری تاریخچه علم طراحی و تحلیل سیستم : روش‌های نسل اول : روش‌های این نسل مبتنی بر انواع تکنیک‌های ساخت یافته برای تولید نرم‌افزار هستند . برنامه نویسی ساخت یافته : برنامه نویسی‌ای که کمترین استفاده از دستور goto در ان باشد و تمرکز بر نوشتن کر برنامه در پیمانه‌های کمتر و حدالامکان یک پیمانه است .(Madule) تحلیل ساخت یافته : برنامه به گونه ای نوشته شود که ارتباط بین پیمانه‌ها حداقل باشد ، تعداد پارامترهای رد و بدل شده کمینه باشد و اطلاعات درون پیمانه‌ها منحصر به خود پیمانه بوده و امکان دسترسی از خارج پیمانه میسر نباشد. تحلیل ساخت یافته : شناخت چگونگی گردش داده‌ها درون سیستم بر اساس فرآیندها را تحلیل ساخت‌یافته گوئیم . (Process Oriented متدولوژی SSADM) روش‌های نسل دوم : روش این نسل با تاکید بر شناخت داده‌ها و اطلاعات درون سیستم‌هاست . (Data Oriented معروف ترین متدولوژی CDM) روش‌های نسل سوم :روش های این نسل مبتنی بر روش شی‌گرا در طراحی و تحلیلی داده‌ها و پردازش‌ها با یکدیگر و هم زمان است .(Object Oriented متدولوژی RUP) مهندسی نرم‌افزار به صورت لایه‌ای : مدل فرآیندی نرم‌افزار : آزمایش یک برنامه : آزمایش : آزمایش black box : به داخل برنامه دسترسی نداریم و فقط ورودی و خروجی داریم . آزمایش white box : به داخل کد دسترسی داریم و ساختار کد را بررسی می‌کنیم . خروجی‌ها : خروجی که نرم‌افزار می‌دهد . (actual) خروجی که اتنظار داریم نرم‌افزار بدهد . (expected) آزمایش به روش black box خروجی actual و expected را مقایسه می‌کند . قسمت بعدی :
  8. خب پاسخ این این سوال خیلی راحت نیست یعنی توضیحات زیادی رو باید بدم و باید موارد زیادی رو در نظر بگیری . اول این رو بگم که این توی حوزه مهندسی نرم افزار هست و اگر دنبال جواب هستی سعی کن جزوه طراحی تحلیل سیستم ها و همینطور مهندسی نرم افزار رو گیر بیاری بخونی البته منم دوتا جزوه خوب دارم از این دوتا که سعی میکنم توی چندین پست مطالبشون رو یکم دسته بندی کنم و بذارم ولی بذار برای جواب بهت از سوالات ساده ترت شروع کنم . بله قطعا همینطور هست یعنی اگر شما پیاده سازی درست یا حتی طراحی درستی از سیستم نداشته باشید قطعا توی توسعش به مشکل میخورید و ممکنه باعث شکست پروژه بشه به احتمال زیاد . خب باید بگم این قطعی نیست و کاملا بستگی به نوع پروژه داره مثلا اگر پروژه یک برنامه ساده دسکتاپ باشه بعد از توسعش و رفع باگ اگر نخواید قابلیت جدید اضافه کنید نیازی نیست خیلی نگران هزینه نگه داری باشید . از طرفی اگر مثلا یک برنامه علمی سنگین رو دارید برای یه حوزه علمی توسعه میدید که خود اون حوزه داره پیشرفت میکنه قطعا هزینه نگهداری سنگین خواهد بود برای مثال فرض کنید شما دارید یک برنامه بر پایه هوش مصنوعی برای پوشش تصویری یک منطقه با توجه به پستی و باندی و نقاط کور برای یک ارگان نظامی توسعه میدید قطعا هزینه نگهداری این برنامه بسیار بالا خواهد بود چون هم حساسیت بالایی داره هم نیاز هست مدام ارتقاع داده بشه . این طبق همون اصول مهندسی نرم افزار هست توی طراحی توی کد زنی فقط یک سری موارد اضافه میشه که میشه از اونها به موارد زیر اشاره کرد داکیومنت کردن درست پروژه نام گذاری درست استفاده از کتابخانه‌های معتبر و فعال در کد به حد اقل رساندن چسبندگی در کد استفاده از روش‌های بهینه و قابل اثبات از نظر ریاضی برای حل مسائل (البته بجر مواردی که با هوش مصنوعی حل می‌شوند مانند مواردی که از الگوریتم ژنتیک استفاده شده و ...) توجه به الگو‌های طراحی در کد ... این مورد رو دقیقا متوجه نمیشم منظورتون چی هست اگر توی بحث الگوریتم منظورتون هست که هرکجا روش خودش رو می‌طلبه این سوال هم خیلی کلی هست نمیشه جواب درستی بهش داد ولی اون دوتا جزوه ای که گفتم رو بگرد پیدا کن هست توی نت قطعا به جواب‌هایی که می‌خوای می‌رسی من هم سعی میکنم توی وقت آزادم موارد این چنینی رو پوشش بدم به عنوان مقاله توی سایت .
  9. بهنام صباغی

    با سلامی دوباره خب توی پروژه ای که سرچ میشه کلاس FilterProxyModel تعریف کرده که از QSortFilterProxyModel به ارث میبره و بعد عمل جستجو رو با اون انجام داده توی فایل mymodel هست یه نگاه بنداز . باید همون رو برای این یکی پروژه هم تعریف کنی تا بتونی سرچ انجام بدی
  10. بهنام صباغی

    مروی بر مهندسی نرم افزار ( قسمت اول )

    مهندسی : عبارت است از تحلیل ، طراحی ، ساخت ، بررسی و مدیریت نهادهای فنی واجتماعی . سوالاتی که یک مهندس باید پاسخ بدهد: چه چیزی باید حل شود ؟ چه ویژگی هایی باید مورد بررسی قرار بگیرد ؟ نهاد چگونه بنا شده است ؟ از چه روشی برای کشف خطا استفاده شود ؟ پشتیبانی به چه صورتی انجام شود ؟ نرم افزار : عبارت است از محصولی شامل برنامه ، مستندات و داده‌ها نیاز های مشتری به سه دسته تقسیم می‌شوند: نیازهایی که اگر پاسخ داده نشوند رضایت‌مندی مشتری به صفر می‌رسد. نیاز هایی که کاربر مطرح می‌کند و سپس انجام می‌شود و باعث بالا رفتن رضایت‌مندی مشتری می‌شود . نیازهایی که اگر پاسخ داده نشوند مشکلی ایجاد نمی‌شود ولی اگر پاسخ داده شود رضایت‌مندی مشتری را به شدت افزایش می‌دهد . یک نرم افزار فرسوده نمی‌شود به این معنی است که در بازه‌های زمانی مشخص نرم‌افزار آپدیت دریافت کرده و مشکلات قبلی را حل و قابلیت‌های جدید اضافه می‌کند . انواع نرم افزارها: سیستمی زمان حقیقی تجاری TPS : Transaction Process System OAS : Office Automation System MIS : Management Information System EIS : Executive Information SystemKWS : Knowledge Work System مهندسی و علمی نرم‌افزار‌های تعبیه شده نرم‌افزارهای کامپیوتر شخصی مبتنی بر وب هوش مصنوعی نرم‌افزارهای ساخت نرم‌افزار اسطوره‌های نرم افزاری : اسطوره‌های مدیریتی با داشتن کتابی آکنده از استعدادها و روال‌های لازم میتوان نرم‌افزار موفقی تولید کرد ( دانش ضمنی ) با داشتن ابزار نرم‌افزار‌ سازی حرفه‌ای و کامپیوتر‌های مدرن میتوان تولید نرم‌افزار را تضمین کرد. ( نیروی متخصص نادیده گرفته شده است) با عقب افتادن از برنامه می‌توان تعداد برنامه‌نویسان را افزایش داده و کار را جلو برد . ( هماهنگ کردن افراد جدید با پروژه سخت است و هزینه و زمان بیشتری می‌برد) استوره های مشتریان : با تغییر نیاز مشتری می‌توان تغییرات لازم را در نرم‌افزار اعمال کرد چون نرم‌افزار انعطاف‌پذیر است (‌هزینه افزایش می‌یابد) اسطوره‌های سازندگان نرم‌افزار هنگاهی که نرم‌افزار نوشته شده دیگر کار تمام است ( مراحل تست و پشتیبانی نادیده گرفته شده است ) تا زمانی که برنامه اجرا نشده است راهی برای ارزیابی کیفیت آن وجود ندارد ( خود برنامه نویس هنگام کد نویسی می‌تواند ارزیابی کند ) تنها چیز قابل تحویل برای یک پروژه نرم افزاری برنامه است ( مستندات و داده‌ها نادیده گرفته شده است ) مهندسی نرم‌افزار از سه گام اصلی تشکیل شده است: تعریف (? what) : چرا ساخت سیستم مهم است؟ سیستم چه تسهیلاتی دارد؟ چه اطلاعاتی مورد نیاز است ؟ چه اطلاعاتی باید پردازش شود ؟ توسعه ( ? How) : ساختار داده‌ها ، ساختار روال‌ها ، ساختار برنامه ، ساختار واسطه‌های کاربری و سیستم چگونه باید باشد ؟ پشتیبانی (! Change) : تصحیح نرم افزار ، بروز رسانی نیاز های جدید ، ساخت گزارشات بیشتر تعریف متدلوژی :در عام یک روش علامت گذاری شده و تعریف شده است. چرا متدلوژی در تحلیل و طراحی سیستم اهمیت دارد ؟ زیرا با داشتن روشی مدون می‌توان مستندسازی نرم‌افزار را با قابلیت بالاتری انجام داد و روند تولید نرم‌افزار از نظر کیفیت تضمین می‌گردد . روندی که یک درخواست در تحلیل و طراحی سیستم طی می‌کند: قسمت بعدی :
  11. بهنام صباغی

    سلام درست متوجه نشدم یعنی چی این قسمت ؟ « تنها چیزی که من تونستم پیدا کنم تابع finditems بود ولی توی مستندات کیوت نتونستم پارامترهای ورودی رو برای کلاسم تعریف کنم» الان مشکل اینه که پارامتر های ورودی برای این تابع رو نداری ؟ یا توی مستندات بهش درست اشاره نشده ؟ یا میخوای به کانستراکتور کلاس ورودی بدی و مشکل داری ؟
  12. بهنام صباغی

    سلام خب برای دوره مقدماتی من یک دوره رو آماده کردم قبلا که می‌تونید از لینک زیر به سرفصل ها و لینک ویدئو های آموزشی به صورت رایگان دسترسی داشته باشید. اینک دوره آموزش مقدماتی Qt Qml ویدئویی و رایگان ولی اگر دنبال یک آموزش منسجم و کامل میگردید باید هزینه کنید و کتاب آموزش پیشرفته ++C همراه Qt (پیشرفته) نسخهٔ رو تهیه کنید که از صفر شروع کرده و تا حد پیشرفته پیش رفته و به نظر من کتاب پر محتوای هست برای دوستانی که می‌خواند کیو ام ال یاد بگیرند.
  13. بهنام صباغی

    واقعا دست شما درد نکنه که این همه وقت گذاشتید برای تولید این کتاب با ارزش این کتاب هم از صفر شروع کرده و قدم به قدم کاربر رو به سمت طراحی حرفه ای رابط کاربری با کیوت و کیو ام ال برده البته بیشتر روی طراحی رابط کاربری تمرکز کرده و کمتر به مسائل دیگه پرداخته که خب توی این کتاب جاشون هم نبوده ولی در کل عالی هست . معرفی انواع مختلف با توضیحاتی در مورد کارکردشون و نمونه کد های زیاد برای بهتر جا افتادن مطلب و در کل همه چیز دست به دست هم داده تا این کار خوب از آب در بیاد . به نظرم این برای کسی که بخواد طراحی رابط کاربری با کیوت و کیو ام ال رو یاد بگیره خیلی عالیه و کافی هست یعنی اگر کسی پا به پای این کتاب کد بزنه و پیش بره در انتهای کتاب میتونه به راحتی هر برنامه ای رو به سرعت و با دقت طراحی کنه رابط کاربریش رو واقعا عالیه .
  14. بهنام صباغی

    این کتاب برای شروع برنامه نویسی با کیوت بسیار مناسب هست حتی برای دوستانی که تا حد خیلی حرفه ای سی پلاس پلاس رو بلد نیستند و میخواند نیم نگاهی به کیوت داشته باشند عالیه چون مسائل رو از صفر و از ساختن پروژه شروع کرده . موضوعات رو هم نسبتا خوب شروع کرده میتونه سرنخی باشه برای شروع کار با کیوت .
  15. بهنام صباغی

    خب پس خدا رو شکر مشکل حل شد
×