درود بر شما


ضمن عرض خیرمقدم ، از اینکه این وب سایت را مورد بازدید قرار می دهید ، سپاسگزارم.


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

team work

فعالیت ها :

1- تولید نرم افزار و برنامه نویسی سیستم های مالی

2- برنامه نویسی سیستم های ERP

3- طراحی و پیاده سازی وب سایتهای سازمانی ، شرکتی ، فروشگاهی و شخصی

4- تولید اپلیکشن های گوشی های هوشمند

5- طراحی UI/UX

نقد و بررسی


picture

شبکه اینترنت ملی ، یک گام به جلو یا عقب

1399/8/29

این روزها هر از گاهی صحبت از اینترنت ملی به میان می آید که اظهارنظر برخی از مسئولان جای تامل و مو شکافی دارد. اجازه بدید قبل از ورود به این بحث ، اشاره ای به راهکارهای یکی از کشورهای پیش رو و موفق در ایجاد و راه اندازی اینترنت ملی داشته باشم.
کره شمالی کشوری است که در آن دسترسی به اینترنت برای همگان ممنوع میباشد. بجز تعداد محدودی از مقامات بلندپایه کشوری ، آنهم بشکل محدود میتوانند از اینترنت استفاده کنند. البته گفته میشود که تعداد کمی از کامپیوترهای موجود در دانشگاه ها هم با نظارت بسیار دقیق می توانند به برخی از محتواهای سایتهای اینترنتی دسترسی داشته باشند. البته همین دسترسی ها هم در راستای تامین منافع دولت صورت می گیرد . سایر شهروندان نیز می توانند فقط به شبکه اینترنت ملی که به آن کوانگ میونگ گفته میشود ؛ تحت شرایط امنیتی خاص خود ؛ دسترسی داشته باشند.
این شبکه ملی اطلاعات و محتوای خود را از مرکز کامپیوتر کره ( KCC ) تامین میکند. کمپانی انفورماتیک پیونگ یانگ نوعی تبلت با سیستم عامل اندروید با نام Ullim در سال 2014 تولید نموده که دارای بالاترین سطح نظارتی و کنترلی میباشد و همگان موظف به استفاده از آن میباشند. از امکانات این تبلت تهیه اسکرین شات از آپهای مورد استفاده و ثبت تاریخچه مرورگر و ارسال آن به یک مرکز امنیتی میباشد.
آقای جولین پین از گزارشگران بدون مرز ، کره شمالی را بدترین سیاهچاله اینترنت جهان توصیف کرده است. به گزارش این نهاد بین المللی در بین 13 کشور ثبت شده در فهرست سیاه این نهاد ، کره شمالی رتبه اول در محدود کردن دسترسی به اینترنت را به خود اختصاص داده است.
و اما در کشور ما ایران ، زمزمه هایی از مسئولان بگوش میرسد که نشان از وجود عزم جدی برای اعمال محدودیت و شاید هم قطع ارتباط با شبکه جهانی اینترنت دارد. بعد از حوادث آبان ماه 98 ، رویکرد مسئولات مهر تاییدی بر این موضوع میباشد. تصویب قوانین سخت گیرانه برای فروشندگان وی پی ان و پروکسی و حتی خریداران این خدمات ؛ صدور احکام 6 ماه تا دو سال زندان ؛ انتقال ارتباطات بانکی به زیرساخت های شبکه ملی و قطع نیاز به بستر شبکه جهانی اینترنت همگی گواه بر این موضوع دارد که پروژه قطع ارتباط با دنیا و اعمال نظارتهای بی حد و حصر بر ارتباطات مردم ، کلید خورده است. ارایه لایحه جهت واگذاری گذرگاه اینترنت به نیروهای مسلح و ممنوعیت فعالیت شرکتهای خارجی فعال در زمینه شبکه های اجتماعی در ایران ، توسط نمایندگان مجلس ، همگی نشان از امنیتی کردن فضای شبکه های اجتماعی و اینترنت دارد. حال اگر در باره ایجاد محدودیت در روند جریان اطلاعات در جامعه مسئولان را مورد سوال قرار دهید ، وجود انحرافهای اخلاقی و اجتماعی و وقوع جرم در فضای مجازی و ... بهانه قرار می دهند و این در حالیست صاحبان تمام سایتهای قمار و شرط بندی یا فرزندان همین مسئولان و یا توصیه شده از طرف همین مسئولان میباشند. از طرفی برخی از مسئولان قوه قضایی صحبت از فیلتر کردن تمام شبکه های اجتماعی خارج از کشور می زنند و یا وزیر ارتباطات مجوز فعالیت این شبکه های اجتماعی را منوط به انتقال سرورهای شرکتهای ارایه دهنده این خدمات ، به داخل کشور اعلام میکند تا ارگانهای امنیتی و اطلاعاتی بتوانند به اطلاعات خصوصی مخاطبان این شبکه ها ، دسترسی داشته باشند ، که قطعا این شرکتها حاضر به نقض حریم خصوصی کاربران خود نیستند. و یا برخی از نمایندگان مجلس داد سخن از ایجاد شبکه های اجتماعی توسط شرکتهای داخل کشور بر میاورند و صحبت از امکان پذیر بودن عضویت کاربران در این شبکه های اجتماعی وطنی فقط با ارایه کد ملی افراد ، می زنند. حال باید نشست و دید آیا پیاده سازی الگوی کشور کره شمالی در کشور ما هم با توجه به بافت فرهنگی و اجتماعی و اقتصادی کاملا متفاوت با کره شمالی ، امکان پذیر خواهد بود و یا نیاز به تغییر دیدگاه دارد.

picture

شبکه های اجتماعی ، چهارچوبی امن یا پر مخاطره

1395/11/28

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

picture

اینترنت و نقش آن در توسعه اقتصاد کشور

1391/6/31

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

picture

بازار تولید نرم افزار و چالش های پیش رو

1390/1/25

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

team work

یاداشتها


icon

تابع و کلاس

در این یاداشت به تفاوتهای کامپوننت های استیت لس و فول استیت می پردازیم. در کامپوننت های تابعی یا استیت لس ، کامپوننت به شکل تابع ؛ مرسوم در جاوا اسکریپت یا بشکل Arrow Function ؛ معرفی میشود و یک المنت ری اکت را برای ما بازمیگرداند.
در این نوع از کامپوننت ها شما می توانید از Props و همچنین از توابع معرفی شده در درون همان کامپوننت استفاده نمایید.
اما در کامپوننت هایی از نوع کلاس یا همان Stateful علاوه بر موارد بالا می توان ، از Render ، State ، Refs و همچنین از چرخه حیات Hook استفاده نمود. مطلب مهم دیگر در ری اکت این موضوع میباشد که در هر دو نوع از کامپوننت ها ، یعنی نوع کلاس و نوع تابعی ، شما مجاز به ایجاد تغییر در مقادیر پراپس ها نیستید. اصطلاحا به کامپوننت هایی که این قانون را رعایت می کنند ، کامپوننت های خالص ؛ Pure ؛ میگویند. یک نکته مهم دیگر در ری اکت ، نام گذاری کامپوننت ها میباشد. نام کامپوننت ها همیشه با حروف بزرگ انگلیسی آغاز میگردد.
function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

-----------------------------------------------------------------------------

class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = {date: new Date()};
  }

  componentDidMount() {
    this.timerID = setInterval(
      () => this.tick(),
      1000
    );
  }

  componentWillUnmount() {
    clearInterval(this.timerID);
  }

  tick() {
    this.setState({
      date: new Date()
    });
  }

  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>It is {this.state.date.toLocaleTimeString()}.</h2>
      </div>
    );
  }
}

icon

استیت و پراپس

در ری اکت معمولا هر کامپوننت در یک فایل ذخیره میگردد تا مجددا قابل استفاده باشد و البته می توان کامپوننتهایی که فقط یک بار استفاده میگردند را در غالب یک فایل ذخیره نمود. هر کامپوننت در ری اکت دارای State می باشد یعنی یکسری متغییرهایی که از بیرون کامپوننت قابل دسترسی نمیباشند و این دسترسی محدود به داخل کامپوننت میباشد و اصطلاحا در داخل کامپوننت کپسوله شده اند.
استیت هر کامپوننت دیتا خود را در غالب یک مجموعه نگهداری می کند. جهت مدیریت استیت از متد useState که توسط ری اکت فراهم شده است استفاده میگردد. به بیانی دیگر شما مجاز به مقداردهی مستقیم به استیت ها نیستید. در واقع ری اکت ، استیت ها را به کامپوننت ها ، قلاب می نماید که اصطلاحا Hook نامیده می شود.
و اما ببینیم Props چیست ؟ در واقع پراپس از نظر مفهومی مولفه ای میباشد که بواسطه آن میتوان دیتا را به داخل کامپوننت تزریق نمود. این دیتا میتواند مقادیر مختلفی با تایپ های متفاوتی باشد و یا حتی می تواند یک تابع باشد. حالت خاصی از پراپس وجود دارد که اصلاحا children نامیده می شود و مقدار ارسالی آن به کامپوننت در بین باز و بسته شدن تگ ، قرار دارد. برای روشن شدن موضوع به نمونه آورده شده در زیر توجه فرمایید.
import React, { useState } from 'react';

function Example() {
  // Declare a new state variable, which we'll call "count"
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

--------------------------------------------------

<WelcomeMessage> Here is some message </WelcomeMessage>

function WelcomeMessage({ children }) {
return <p>{children}</p>
}

icon

مفهوم JSX چیست؟

بطور کلی JSX گرامر افزوده شده به جاوا اسکریپت می باشد که در آن میتوانید کدهای اچ تی ام ال را مستقیما در جاوا اسکریپت استفاده نمایید. البته این گرامر در مرورگرهایی که با نسخه ES5 اجرا میشوند سازگار نمی باشد و برای رفع این مشکل ابتدا توسط مفسر Babel به کدهای قابل اجرا در ES5 کامپایل شده و سپس اجرا میشوند . در این فرآیند کدهای اچ تی ام ال به جاوا اسکریپت ترجمه می شوند . در ری اکت نیز از همین تکنیک ، استفاده شده است . یعنی یک تگ که میتواند در درون خود ، تگهای مختلفی را شامل شود ، بصورت کدهای اچ تی ام ال در Virtual DOM ایجاد شود و در نهایت رندر و در دام اصلی اعمال گردد.
const element = <div><h1>Hello world</h1></div> ;

ReactDOM.render(
  element,
  document.getElementById('root')
);

icon

Virtual DOM

دام ، تکنولوژی ای میباشد که جاوا اسکریپت جهت دسترسی به تگ های یک سند اچ تی ام ال از آن استفاده مینماید. در ابتدا صفحه وب طی فرآیندی بررسی و ساختار درختی المنت ها و جایگاه آنها ایجاد میشود. در مرحله بعدی جاوا اسکریپت با توجه به رویدادها ، تغییرات را بر دام اعمال نموده و متعاقبا بر سند اچ تی ام ال منعکس میگردد.حال نگاهی به عملکرد ری اکت در اجرای پروسه فوق می اندازیم. توسعه دهندگان ری اکت جهت افزایش سرعت و همچنین راندمان آن از راهکاری به نام Virtual DOM بهره گرفته اند ، بدین صورت که یک کپی از دام در حافظه ایجاد میکند و تمام تغییرات ابتدا در آن اعمال میشود و سپس دیفرانسیل آن را با دام اصلی بدست آورده و تغییرات در دام اصلی و به تبع آن در سند اچ تی ام ال اعمال میشود. دقت کنید فرآیند بروزآوری دام فقط بروی تگهای تغییر کرده و تگهای زیر مجموعه آن اعمال می گردد.

icon

نصب کتابخانه های مورد نیاز NodeJS

در ابتدا با استفاده از دستورات خط فرمان نرم افزار مدیریت پکیج های جاوا اسکریپت مانند npm و یا yarn چارچوب و ابزارهای مورد نیاز ری اکت را تحت عنوان یک پروژه نصب می کنیم. سپس به مسیر پروژه رفته و سرور مجازی جهت مشاهده پروژه در مرورگر وب را اجرا میکنیم.حالا نگاهی اجمالی به ساختار پروژه ایجاد شده می اندازیم. در مسیر اصلی پروژه پرونده ای تحت عنوان package با فرمت json وجود دارد که در آن فهرستی از کتابخانه های مورد نیاز پروژه قرار گرفته که مفسر ری راکت جهت اجرای کدهای شما از آن بهره میگیرد. این کتابخانه ها در فولدری تحت عنوان node_modules قرار دارد.از دیگر فولدرهای ایجاد شده در مسیر پروژه ، فولدر src است که محتوای آن کدهای نوشته شده در ری اکت و ملحقات آن میباشد. فولدر public هم که در مسیر پروژه قابل مشاهده میباشد شامل منابع موردنیاز خارج از ری اکت و موردنیاز در کدهای html میباشد.
npx create-react-app my-app
cd my-app
npm start

icon

کتابخانه ای کوچک ولی به وسعت دنیا

ری اکت جی اس یکی از کتابخانه های جاوا اسکریپت میباشد ، که توسط شرکت فیسبوک مورد توسعه قرارگرفته و خیلی سریع در بین توسعه دهندگان و برنامه نویسان مورد استقبال قرار گرفت. در این نوشتار به بررسی علت رشد سریع استفاده از این کتابخانه در بین توسعه دهندگان می پردازیم. بیشتر کارشناسان و برنامه نویسان ، جهت توجیه عملکرد ری اکت ، به مقایسه آن با انگولار جی اس و دیگر فریمورکهای جی اس میپردازند که معتقدم ملاک مناسبی برای سنجش نمیباشد. به هرحال یک فریمورک بعنوان یک راه حل جامع ، طیف وسیعی از امکانات و راهکار ها را در اختیار توسعه دهندگان قرار میدهد و قابل قیاس با یک کتابخانه از جاوا اسکریپت نمیباشد. بنظر من دلیل استقبال برنامه نویسان از ری اکت در این نکته نهفته میباشد که ری اکت یکی از بهترین ابزارهای توسعه دهندگان برای عبور از برنامه نویسی شی گرا به سوی برنامه نویسی تابع محور میباشد. ری اکت جی اس یکی از بهترین ابزارهای جاوا اسکریپت برای پیاده سازی کدها در پارادایم تابع محور میباشد و هر روز توسعه دهندگان مباحث تکمیلی و موردنیاز را به آن الحاق میکنند و معتقد هستم در زمانی نه چندان دور ری اکت تبدیل به یک فریمورکی قوی در دنیای برنامه نویسی خواهد شد.

icon

فراهم کننده سرویس

فراهم کننده سرویس یا همان سرویس پروایدر ، هسته اصلی بوت استرپینگ تمام اپلیکیشن های لاراول میباشد. اجازه بدید اول مفهوم بوت استرپینگ رو بررسی کنیم. بطور کلی منظور ما از بوت استرپینگ ، ریجیستر کردن و پیکره بندی هر چیزی در لاراول ، از جمله سرویس کانتینر و Binding های آن ، بررسی کننده های رویدادها ، میان افزارها و مسیریابی ها.
اگر شما نگاهی به محتویات فایل app.php واقع در فولدر config بیندازید ، آرایه ای از سرویس پروایدرها را خواهید دید. یعنی تمام کلاسهای سرویس پروایدر که برای اجرای اپلیکیشن شما ، بارگذاری خواهند شد را مشاهده می کنید.
بطور پیشفرض مجموعه ای از سرویس پروایدرهای پایه ای لاراول در این آرایه ، فهرست می شوند. کامپوننت هایی مانند mailer, queue, cache و دیگر ملزومات.
البته بیشتر این پروایدرها در صورت نیاز بارگذاری می شوند ، در غیر اینصورت بارگذاری آنها به تعویق می افتد. در این یاداشت با ایجاد و ریجیستر یک سرویس پروایدر آشنا می شویم.
ایجاد یک سرویس پروایدر
تمام سرویس پروایدرها از کلاس Illuminate\Support\ServiceProvider ارث بری می کنند. به همین دلیل دارای متد Register و Boot می باشند. لازم به ذکر است که شما می توانید با پروپرتی app$ به سرویس کانتینر دسترسی داشته باشید. حالا جهت ایجاد یک پروایدر از دستور خط فرمان ارتیسان با پارامتر make:provider استفاده می کنیم.
متد ریجیستر
از متد ریجیستر فقط برای Bind کردن کلاسها در سرویس کانتینر استفاده می شود. نکته مهم در این مقوله این میباشد که شما سعی نکنید بررسی کننده های رویدادها و مسیریابی ها و دیگر کدها را در متد ریجیستر قرار دهید.
متد بوت
این متد بعد از ریجیستر سرویس پروایدرها ، فراخوانی می شود. این بدین معنی است که شما به تمام سرویس های ریجیستر شده در فریمورک دسترسی خواهید داشت.

ادامه دارد...

php artisan make:provider MyServiceProvider

-----------------------------------------------------------------------------------------

namespace App\Providers;

use App\Services\MyService\Connection;
use Illuminate\Support\ServiceProvider;

class MyServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton(Connection::class, function ($app) {
            return new Connection(config('myService'));
        });
    }
}

-----------------------------------------------------------------------------------------

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        View::composer('view', function () {
            //
        });
    }
}

-----------------------------------------------------------------------------------------

use Illuminate\Contracts\Routing\ResponseFactory;

/**
 * Bootstrap any application services.
 *
 * @param  \Illuminate\Contracts\Routing\ResponseFactory
 * @return void
 */
public function boot(ResponseFactory $response)
{
    $response->macro('serialized', function ($value) {
        //
    });
}

icon

کانتینرها

سرویس کانتینر در واقع مخزن نگهداری کلاسها و وابستگی های کلاسها می باشد. سرویس کانتینر یک ابزار کارآمد برای مدیریت کلاسها و تزریق وابستگی ها به کلاسها ، میباشد. منظور از تزریق وابستگی ، یعنی یک کلاس از طریق تابع سازنده به کلاس دیگر ارسال گردد.
خوشبختانه بسیاری از کلاسها ، در هنگام ایجاد یک پروژه لاراول ، بصورت خودکار وابستگی های خود را از سرویس کانتینر دریافت میکنند. بطور مثال Controller , Event listener و میان افزارها همگی از همین کلاسها میباشند. بدون نیاز به پیکره بندی خاصی و بصورت خودکار قابل استفاده میباشند و همین امر از مزیتهای مهم لاراول میباشد.
اکنون این سئوال پیش می آید که آیا میتوانیم برای کلاسهایی که خودمان ایجاد کرده ایم ، پیکربندی خودمان را در سرویس کانتینر داشته باشیم ؟ و سئوال دیگر ، در چه مواقعی این کار لازم است ؟ در جواب سئوال اول باید بگویم بله . اما در جواب سئوال دوم ، به ذکر دو مثال می پردازم. اولی زمانیست که بخواهیم یک اینترفس را به کلاسی مرتبط کنیم که در اینجا باید به سرویس کانتینر بگوییم چگونه آن اینترفیس را Resolve نماید.
دومی زمانیست که یک پکیج لاراول نوشته ایم و میخواهیم آنرا با توسعه دهندگان دیگر به اشتراک بگذاریم. در اینصورت نیاز داریم تا پکیج سرویس خود را در کانتینر Bind نماییم. برای اینکار Bind سرویس خود را در فراهم کننده سرویس ریجیستر می کنیم.
البته روشهای مختلفی جهت Bind نمودن یک سرویس وجود دارد. روشهایی همانند:

Simple Bindings , Binding A Singleton , Binding Instances , Binding Interfaces To Implementations , Contextual Binding , Binding Primitives , Binding Typed Variadics , Extending Bindings

که در یاداشتهای بعدی تک تک این موارد را بررسی می کنیم.

icon

پیکره بندی

از آنجایی که Http اپلیکیشن های Stateless را سرویس می دهد ، سیشن به ما کمک می کند تا بتوانیم اطلاعات کاربران را در میان تعدد درخواستهایشان ، ذخیره نماییم.
تنظیمات سیشن لاراول در فایل session واقع در دایرکتوری config ذخیره می گردد.
از جمله تنظیمات مهم سیشن ، شکل نگهداری اطلاعات میباشد. بطور مثال پیش فرض لاراول برای حفظ اطلاعات درخواستها ، فایل میباشد. گزینه های دیگری هم برای این تنظیمات وجود دارد. این گزینه ها عبارتند از file, cookie, database, memcached و همچنین ارایه ها.
در گزینه فایل اطلاعات سیشن ها در دایرکتوری storage/framework/sessions نگهداری می شود. با انتخاب گزینه کوکی ، اطلاعات سیشن ها در کلاینت و بصورت رمزنگاری شده و امن نگهداری می شود. و اما اگر تنظیمات سیشن در حالت دیتابیس باشد اطلاعات سیشن ها در یک بانک اطلاعاتی رابطه ای ذخیره می گردد.
حال اگر این تنظیمات memcached یا redis باشد این اطلاعات در زیرساخت کش استور نگهداری می شود که نسبت به روشهای دیگر خیلی سریعتر عمل می کند. در نهایت آخرین روش استفاده از ساختار آرایه ای در PHP میباشد که بهره گیری از این روش توصیه نمیشود.
در انتهای یاداشت ، دستورات موردنیاز برخی از روشها گفته شده ، حضورتان تقدیم می گردد.
Schema::create('sessions', function ($table) {
    $table->string('id')->unique();
    $table->foreignId('user_id')->nullable();
    $table->string('ip_address', 45)->nullable();
    $table->text('user_agent')->nullable();
    $table->text('payload');
    $table->integer('last_activity');
});

php artisan session:table
php artisan migrate

$value = $request->session()->get('key');
$value = session('key');
session(['key' => 'value']);

icon

ایجاد کنترلر

کنترلها همان گونه که از نامشان پیدا ، لایه کنترل از معماری MVC می باشند. در واقع کنترلها مجموعه توابع هستند که در زمان مسیریابی ، فراخوانده می شوند و وظیفه سازماندهی فرآیندهای مسیریابی و همچنین ایجاد ارتباط بین ویوها و مودلها توسط لایه کنترل انجام می یابد.
کنترلرها در لاراول از کلاس پایه Controller توسعه داده می شوند. این کلاس پایه شامل متدهای پرکاربردی است که توسعه دهندگان را در پیاده سازی برخی روالها بسیار یاری می نماید. از جمله آنها میتوان به میان افزارها و اعتبار سنجی ها ، اشاره نمود.
از دیگر مباحث مهم و قابل تامل در کنترلرها ، استفاده از کنترلرهای ریسورس میباشد که شامل توابع CRUD میباشد که در واقع عملیات ایجاد ، خوانش ، بروزآوری و حذف اطلاعات هندل می کنند.
در ادامه نمونه ای از کنترلر و همچنین دستورات ارتیسان جهت ایجاد کنترلرها را ، فهرست میکنم. در ضمن دایرکتوری App/Http/controllers محل نگهداری کنترلرها میباشد.
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Models\User;

class UserController extends Controller
{
    public function show($id)
    {
        return view('user.profile', ['user' => User::findOrFail($id)]);
    }
}

use App\Http\Controllers\UserController;
Route::get('user/{id}', [UserController::class, 'show']);

php artisan make:controller ShowProfile

php artisan make:controller PhotoController --resource

icon

متدهای روتینگ

به زبان ساده ، مسیریابی در لاراول به پذیرفتن و هدایت یک URL به اجرای یک تابع گفته می شود. این مسیریابی مطابق دستورالعمل های که ما آنرا مشخص مینماییم انجام می گردد. این دستورالعملها در لاراول در فولدر routes و در فایلهایی تحت عناوینی همچون web.php و api.php و غیره ثبت می گردند. این فایلها به شکل خودکار توسط فریمورک در حافظه بارگذاری میگردند و با دریافت هر رکوئیست ، فرآیند مسیریابی انجام شده و روال های معرفی شده برای آن ، به اجرا در می آید.
متدهای موجود در مسیریابی لاراول شامل get, post, put, patch, delete, options میباشد و همچنین شاید شما نیاز به هندل چند متد را در یک مسیریابی داشته باشید که در اینصورت میتوانید با متد match به نیاز خود جامه عمل بپوشانید.
از دیگر سو می توان با استفاده از متد any تمامی متدهای مذکور را یکجا مسیریابی نمایید. در صورت نیاز به ریدایرکت کردن یک URL به آدرسی دیگر از متد redirect میتوان استفاده نمود.
در مسیریابی لاراول ، می توان یک ویو را بدون نیاز به کنترلر و یا یک تابع ، بازگرداند. برای انجام این نوع مسیریابی از متد view استفاده می شود.
برخی مواقع لازم است که پارامترهایی را در قالب URL ارسال کنیم. در این صورت از مسیریابی پارامتریک استفاده می کنیم. در انتهای یاداشت نمونه هایی از انواع مسیریابی در لاراول بعنوان مثال آورده شده است.
Route::get('foo', function () {
    return 'Hello World';
});

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

Route::match(['get', 'post'], '/', function () {
    //
});

Route::any('/', function () {
    //
});

Route::redirect('/here', '/there');

Route::view('/welcome', 'welcome');

icon

بلید ویو

به زبان ساده بلید ویو ها ابزاری هستند جهت پیاده سازی قسمت View از معماری MVC در لاراول ، که سهولت استفاده از PHP را برای توسعه دهندگان به ارمغان آورده است. ایجاد صفحات layout و ارثبری از این چیدمان ها در صفحات دیگر از مزیتهای بلید ویو ها میباشد. فایل های بلید ویو با پسوند blade.php. بطور پیش فرض در مسیر resources/views قرار می گیرد.
برای روشن تر شدن موضوع به نمونه کد زیر توجه فرمایید. صفحه ای را به عنوان مستر پیج کدنویسی کرده و با استفاده از دستور yield@ محل قرارگیری محتوای ارسالی از صفحات دیگر را علامت گذاری کرده و در صفحات دیگر با استفاده از دستور section@ محتوا و یا پارامترهای موردنظر را به مسترپیج ارسال میکنیم. ما در هر صفحه ای با استفاده از دستور extends@ مشخص می کنیم صفحه مستر مورد نظر ما ، کدام صفحه میباشد.
به این ترتیب از نوشتن کدهای تکراری اجتناب میکنیم و همچنین ایجاد تغییرات در وب سایت براحتی انجام می پذیرد و نهایتا در فاز نگهداری کد بعد از عملیاتی شدن پروژه ها ، دچار مشکل و سر در گمی نخواهیم شد.
برای ارسال اطلاعات به بلید ویو ؛ جهت نمایش ؛ از علامت {{ }} استفاده میگردد. ساختارهای کنترلی از دیگر مزیتهای بلید ویوها میباشد که ساده تر از ساختار کنترلی PHP در دسترس ما قرار می گیرد. دستورات if , @else , @elseif , @endif@ از جمله دستورات کنترلی در بلیدویو ها می باشند.
از دیگر دستورات پرکاربرد بلیدویو ، دستورات مرتبط با ساختارهای تکرارشونده میباشد که از جمله آن میتوان به for , @foreach , @forelse@ اشاره نمود.
در جمع بندی این یاداشت به این نکته اشاره می شود که سهولت استفاده از بلید ویوها در مقایسه با دستورات PHP یکی از جذابیتهای لاراول برای توسعه دهندگان میباشد که آن را نسبت به سایر فریمورکهای پی اچ پی محبوبتر نموده است. مباحث تکمیلی دیگر از بلیدویوها را در یاداشتهای بعدی ، حضورتان تقدیم خواهد شد.
<!-----  masterPage.blade.php  -----!>
<!DOCTYPE html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="shortcut icon" href="/images/favicon.ico">
    <link rel="stylesheet" type="text/css" href="/css/style.css" />
    <script src="/js/jquery.min.js"></script>
    <title>@yield('title')</title>
</head>
<body>
<div>
    @yield('content')
</div>
</body>
</html>

<!-----  home.blade.php  -----!>
@extends('masterPage')
@section('title','My website home page')
@section('content')
   <div>
      <p>   hello world.  </p>
  </div>
@endsection

icon

ساختار دایرکتوری

بطور پیش فرض لاراول ، بعد از ایجاد پروژه ، یکسری فولدرها و فایلهایی را در دایرکتوری پروژه ایجاد می کند تا توسعه دهنده ها را به مسیرهایی دسته بندی شده از معماری MVC هدایت کند که مناسب برای هر گونه پروژه های کوچک و بزرگ میباشد. در این یاداشت به بررسی برخی از اساسی ترین ساختارها ، در پروژه های لاراول می پردازیم. دایرکتوری App محل نگهداری فولدرها و فایلهای اصلی و مهم پروژه میباشد. دایرکتوری Bootstrap محل نگهداری فایل app.php که همان بوت استرپ فریمورک میباشد. همچنین از این فولدر جهت کش ؛ Cache ؛ فایلهای ایجاد شده توسط فریمورک جهت دستیابی به بازدهی بالا و بهینه سازی اجرای فریمورک استفاده میگردد. دایرکتوری Config نیز برای نگهداری فایلهای مربوط به پیکربندی های سیستم استفاده می گردد.از جمله تنظیمات فریمورک ، دیتابیس ، ایمیل و غیره . دایرکتوری Database محل ذخیره فایلهای migrations و factories و seeds میباشد که شامل دستوالعمل های مربوط به بانک اطلاعاتی می باشند. دایرکتوری Public محل قرارگرفتن فولدرها و فایلهای CSS و JS و فونتها و تصاویر و متعلقات پروژه میباشد. دایرکتوری Routes هم شامل فایلهای web.php, api.php, console.php است که وظیفه مسیریابی در متدهای استفاده شده در پروژه را بعهده دارد. دایرکتوری Storage محلی مجزا برای حفظ فایلهای session و روتهای کامپایل شده توسط فریمورک ، لاگ فایلها و غیره می باشد. دایرکتوری Tests محل نگهداری فایلهای مربوط به تستهای اتوماتیک میباشد. دایرکتوری Vendor مربوط به اطلاعات مورد نیاز Composer جهت نصب ملحقات لاراول می باشد. دایرکتوری Resources محل نگهداری ویوها و تعلقات کامپایل نشده ؛ raw ؛ مانند Less ، Sass ، Javascript می باشد. همچنین فایلهای مربوط به زبانها نیز در این دایرکتوری ذخیره می شوند.

icon

بستر مورد نیاز

راه اندازی لاراول مانند هر فریم ورک دیگر ، نیاز به ایجاد بستر نرم افزاری خاص خود را دارد. از جمله اساسی ترین این بستر ، پی اچ پی میباشد.به غیر از آن نصب ملحقات آن هم ؛ Extension ؛ ضروری میباشد. نگارش پی اچ پی باید 7.2.5 و بالاتر باشد. اکستنشن ها BCMath ، Ctype ، Fileinfo ، JSON ، Mbstring ، OpenSSL ، PDO ، Tokenizer ، XML باید نصب و فعال باشند. برای نصب لاراول و ملحقات آن ؛ dependencies ؛ از نرم افزار Composer استفاده می شود. سپس دستورات لاراول در خط فرمان قابل دسترس می باشد. برای ایجاد یک پروژه جدید از دستور laravel new myproject استفاده میکنیم. پس اتمام اجرای دستور مذکور ، دایرکتوری تحت عنوان myproject ایجاد میگردد. ؛ دقت کنید بهتر است عنوان پروژه را با حروف کوچک الفبای انگلیسی وارد نماییم. ؛ وارد دایرکتوری ایجاد شده می شویم و برای اجرای وب سرور لاراول از دستور serve از مجموعه دستورات artisan استفاده می کنیم. پس از اجرای دستور فوق ، آدرس و پورت سرور نمایش داده می شود. با بروزر خود وارد آدرس مذکور می شوید تا هوم پیچ پروژه نمایش داده شود.
composer global require laravel/installer
laravel new myproject
php artisan serve

icon

لذت برنامه نویسی در پی اچ پی

لاراول فریمورکی اپن سورس با زبان برنامه نویسی پی اچ پی توسط تیلر اتول بر پایه فریمورک سیمفونی توسعه یافت و مورد استقبال توسعه دهندگان وب قرار گرفت. معماری پیاده شده در این فریمورک MVC میباشد. برخی از امکانات لاراول توسط ابزار مدیریت پکیج قابل نصب و استفاده می باشد. همچنین از ابزاری تحت عنوان Artisan در خط فرمان استفاده می کند که در ایجاد و اجرای برخی از تسهیلات این فریمورک نقش بسزایی را ایفا می نماید. استفاده از لاراول بسیار ساده و روان میباشد و در واقع پی اچ پی را به شکل ساده و روان در اختیار کدنویسان قرار می دهد. در این سلسله مباحث قصد دارم به برخی از این مزایا و امکانات اشاره کوتاهی نمایم امیدوارم برای مخاطبان این وب سایت مفید واقع گردد.

icon

فریمورکهای نود جی اس

در این یاداشت نگاه اجمالی به فریمورکهای مبتنی بر نود جی اس می اندازیم. همانطور که پیش تر اشاره کردیم مزایا نود جی اس باعث گردیده که از آن بعنوان یک Backend مناسب و قابل اطمینان در پردازشهای سمت سرور از سوی توسعه دهنده گان مورد توجه واقع شود. برای همین فریمورکهای متعددی بر پایه آن توسعه یافته است که در این جا به معرفی اجمالی برخی از محبوبترین فریمورکها می پردازیم.
فریمورک Express : یک سرویس دهنده وب که بسیار سریع ، مستقل ، سبک و انعطاف پذیر میباشد و از راندمان خوبی در اجرای وب اپلیکیشن ها برخوردار است. پیاده سازی میان افزارها و همچنین API ها ، در این فریمورک سریع و آسان میباشد.
فریمورک Hapi : این فریمورک بعنوان یک سرویس دهنده وب ، شامل چند هسته مبتنی بر سرویسهای API و پلاگینهای مرتبط میباشد که فراهم کننده امکانات مدرنی از وب سرویسها میباشد. مدیریت سیشنها ، امنیت ، اتصالات و همچنین یونیتهای تست ، از قابلیت این فریمورک میباشد. استفاده از OAuth برای احراز هویت و همچنین HTTP proxy برای مدیریت Request ها از دیگر قابلیتهای آن میباشد. از بیس این فریمورک در توسعه Express JS نیز استفاده گردیده است.
فریمورک Mojito : این فریمورک ، با طراحی ماجولار جهت پیاده سازی تست های مختلف در نسخه های آزمایشی وب اپلیکیشن ها ، مورد استفاده قرار می گیرد.
فریمورک Meteor : این فریمورک جهت ایجاد و استقرار وب اپلیکیشن ، دسکتاپ و موبایل اپلیکیشن ، بطور یکپارچه توسعه یافته است. این فریمورک شامل بیشتر تکنولوژی های موردنیاز جهت توسعه اپلیکیشن ها در تمامی دیوایس ها میباشد و در بین توسعه دهندگان از محبوبیت خاصی بر خوردار است.

icon

آیا نود جی اس یک زبان برنامه نویسی است؟

در این فصل از یاداشتها ، قصد دارم به نود جی اس و فریمورکهای آن بپردازم. نود جی اس یک نرم افزار متن باز و قابل اجرا در پلتفرم های مختلف میباشد که محیطی را جهت اجرای کدهای جاوا اسکریپت فراهم میکند.
همانطور که می دانید کدهای جاوا اسکریپت در مرورگرها قابل اجرا میباشد. هر مرورگر از یک مفسر جهت اجرای این کدها استفاده میکند. بطور مثال فایرفاکس موزیلا از SpiderMonkey و سافاری اپل از Nitro و اینترنت اکسپلورر مایکروسافت از Chakra و کروم از V8 برای اجرای کدهای جاوا اسکریپت استفاده می کنند.
نود جی اس توسط آقای رایان دال توسعه یافت که با استفاده از مفسر V8 گوگل کروم ، کدهای جاوا اسکریپت را در خارج از محیط مرورگرها اجرا می کند. اما مزایا استفاده از نود جی اس برای توسعه اپلیکیشن ها ، چیست؟
نود جی اس یکی از بهترین گزینه ها جهت توسعه نمونه اولیه و آزمایشی یک نرم افزار میباشد. همچنین بسیار مناسب برای پیاده سازی نرم افزارها با استفاده از روشهای Agile و توسعه تکاملی اپلیکیشن ها میباشد . از دیگر مزایا آن مقیاس پذیری حداکثری و همچنین سرعت اجرای بالا میباشد. دلیل این امر استفاده نود جی اس از معماری None Blocking یا Asynchronous برای پردازش درخواستها میباشد. از این رو است که استفاده از نود جی اس برای اپلیکیشن هایی که نرخ بالایی در استفاده از I/O را دارند ، بسیار ایده ال میباشد. از طرفی استفاده از نود جی اس برای اپلیکیشن هایی که نرخ بالایی در استفاده از سی پی یو را دارا هستند ، مناسب نمیباشد.
در عین حال ، دارا بودن یک اکوسیستم بزرگ از کتابخانه های متن باز ، یکی از مزایا و دلایل محبوبیت نود جی اس در بین توسعه دهندگان میباشد. در پایان این یاداشت به بیان نحوه استفاده از نود جی اس میپردازم.
ابتدا نرم افزار نود جی اس را از وب سایت آن دانلود و نصب می کنیم. سپس با استفاده از یک ادیتور ، فایلی بنام myFirstApp.js ایجاد کرده و کدهای زیر را در آن قرار می دهیم و مطابق دستورالعمل زیر ، آن را اجرا میکنیم.
function sayHello(name) {
   console.log("Hello " + name);
}
sayHello("Iran");

--------------------------------------------------------------

node myFirstApp.js

icon

زبان برنامه نویسی برای اندروید

گوگل در سال 2017 زبان برنامه نویسی کاتلین را بعنوان زبان رسمی توسعه اپلیکیشن های اندروید ، معرفی نمود. در این یاداشت به مقایسه کلی جاوا و کاتلین می پردازیم. کاتلین یک زبان برنامه نویسی قوی و ساخت یافته ای میباشد که برنامه نویسی با آن راندمان و بهره وری خیلی بیشتری نسبت به کدنویسی در جاوا ، برای برنامه نویسان به ارمغان آورده است. خیلی از کارهایی که در جاوا نیاز به کدنویسی بوده ، در کاتلین بطور خودکار انجام میگردد. به همین دلیل تعداد خطوط کدنویسی شده در کاتلین بسیار کمتر از جاوا ؛ در یک پروژه یکسان ؛ می باشد. در نتیجه زمان کمتری برای توسعه اپلیکیشن ها ، نیاز است.
بطور مثال دیگر نیاز نیست مانند جاوا کارهایی از قبیل getters and setters, equals, hashCode یا toString را انجام دهید.
یکی از مشکلات و ضعف های جاوا ، بروز خطای NullPointerException میباشد ، که این مشکل جاوا در کاتلین حل شده است.
کاتلین کاملا با جاوا سازگار میباشد. از آنجا که کاتلین بایت کدهای جاوا را تولید میکند شما میتوانید فریمورک ها و کتابخانه های جاوا را در کاتلین مورد استفاده قرار دهید.
از طرفی شرکتهای بزرگ جهت توسعه اپلیکیشن های خود ، شروع به استفاده از زبان کاتلین نموده اند و همین امر زمینه جذب بیشتر برنامه نویسان آشنا با کاتلین را در این شرکتها فراهم نموده است که باز همین امر باعث گسترش آموزش زبان کاتلین در بین برنامه نویسان گردیده است.
تسهیلات موجود در کاتلین ، باعث شده که این زبان دوران بلوغ خود را به سرعت پشت سر گذاشته و چشم انداز روشنی را برای خود رقم زده است.

icon

ایجاد یک پروژه

برای ساخت یک اپلیکیشن اندرویدی با استفاده از ابزار رسمی برنامه نویسی برای سیستم عامل اندروید ، ابتدا امکانات مورد نیاز برنامه نویسی به زبان جاوا از قبیل Java Runtime و Java SDK را نصب و سپس نرم افزار اندروید استدیو را از سایت رسمی آن دانلود و نصب می کنیم. در اولین اجرای اندروید استدیو ، این برنامه شروع به دانلود و نصب برخی از ملزومات برنامه نویسی اپلیکیشن های سیستم عامل اندروید می نماید.
از جمله ملزومات برنامه نویسی اندروید ، Android SDK یا Software Development Kit میباشد که مجموعه توابع و کتابخانه‌های کامپایل شده‌ای است که تولیدکنندگان نرم‌افزار از این ابزار برای برنامه‌نویسی در پلتفرم اندروید ، استفاده می نمایند. از دیگر ملحقات اندروید استدیو میتوان به ابزارهایی مانند مدیریت دستگاه مجازی ؛ شبیه ساز ؛ و ADB bridge و همچنین Sources for Android و Android SDK Platform برای ساخت برنامه های جاوا در پلتفرم اندروید ، اشاره نمود.
پس از اتمام فرآیند نصب ، وارد محیط اندروید استدیو شده و با انتخاب گزینه پروژه جدید شروع به تکمیل مشخصات پروژه از جمله عنوان اپلیکیشن ، انتخاب نوع دستگاه ، نسخه سیستم عامل اندروید جهت سازگاری و سایر اطلاعات موردنیاز ، مینماییم و در نهایت به صفحه انتخاب نوع اکتیویتی هدایت می شویم.
در اپلیکیشن های اندروید ، نقطه شروع اجرای نرم افزار ، اکتیویتی اصلی ؛ Main Activity ؛ میباشد و بنا به نیاز ، اکتیویتی های دیگر فراخوانی و اجرا میشوند. هر اکتیویتی به دو بخش Front-end و Back-end تقسیم می شود.قسمت Front-end به بخشی گفته می شود که کاربر با آن تعامل دارد، یعنی همان User interface یا رابط کاربری . قسمت UI توسط کدهای XML و در فایلی با همین پسوند قرار می گیرند. قسمت Back-end مربوط به کدهای پشت صحنه بوده که از دید کاربر پنهان است که شامل کدهای زبان برنامه نویسی جاوا یا کاتلین و یا C می باشد.این دو قسمت هر اکتیویتی باید به نحوی به یکدیگر پیوند داده شوند. به عبارتی باید فایل xml را درون فایل Backend معرفی کنیم.

ادامه دارد...

icon

برنامه نویسی نیتیو یا هایبرید

توسعه اپلیکیشن های موبایل معمولا در سه سبک و روش انجام می گیرد. هر کدام از این سبک های برنامه نویسی دارای مزیتهایی میباشد که مطابق با امکانات موردنیاز اپلیکیشن مورد توسعه ، یکی ازاین روشها انتخاب و مورد استفاده قرار می گیرند. در این یاداشت به بررسی اجمالی این روشها ، پرداخته شده است.
1. برنامه‌های موبایل نیتیو (Native Applications)
در توسعه نیتیو ، ما از نرم افزارهای مخصوص توسعه و تولید اپلیکیشن های سیستم عامل اندروید مانند اندروید استدیو و زبان برنامه نویسی جاوا ؛ همچنین زبان برنامه نویسی کاتلین و سی پلاس پلاس ؛ استفاده می کنیم. در این روش ما به طیف گسترده ای از منابع سخت افزاری دستگاه و منابع نرم افزاری سیستم عامل دسترسی داریم. همچنین بازدهی و سرعت اجرای بالا اپلیکیشن از مزیتهای مهم برنامه نویسی نیتیو می باشد و علت آن هم ترجمه مستقیم کدهای برنامه به کدهای اجرایی سطح سیستم عامل ؛ Dalvik bytecode ؛ میباشد.
2. برنامه‌های وب (Web Applications)
این شکل از برنامه ها ، معمولا آپلیکیشن محسوب نمی گردند بلکه همان وب سایت هایی هستند که به شکل ریسپانسیو طراحی شده اند و در دستگاه های مختلف و دارای صفحه نمایش در اندازه های مختلف ، قابلیت نمایش را دارند. یکی از تکنولوژی های مورد استفاده در اینگونه از توسعه ، PWA میباشد که طرفداران زیادی در بین توسعه دهنگان دارد.
3. برنامه‌های موبایل هیبرید (Hybrid Applications)
اما در توسعه اپلیکیشن های هایبریدی ، در قالب برنامه نویسی نیتیو از وب اپلیکیشن استفاده می شود. یعنی در چارچوب برنامه نویسی نیتیو با استفاده از کلاسهای WebView میتوانید کدهای اچ تی ام ال و جاوا اسکریپت را اجرا نمایید.
معمولا جهت توسعه چند سکویی اپلیکیشن ها ، از توسعه هایبریدی استفاده می شود. توسعه چند سکویی یا همان Cross-Platform ، یعنی بتوان از کدهای نوشته شده ، برای پلتفورم های دیگر بطور مثال IOS خروجی گرفت و در گوشی های اپل نیز از اپلیکیشن توسعه داده شده استفاده نمود. ؛ البته نه تمام کدهای اپ بلکه بخشی از آن بطور مشترک قابل استفاده می باشد ؛ این مزیت باعث صرفه جویی در منابع زمانی و مالی در پروسه توسعه یک اپلیکیشن در پلتفرمهای مختلف میشود که بسیار حایز اهمیت میباشد. یکی از ابزارهای محبوب و معتبر در این روش از توسعه ، زامارین میباشد که توسط شرکت مایکروسافت از تولیدکننده آن ؛ Xamarin ؛ خریداری و عرضه شده است. از دیگر ابزارهای رایج می توان از Flutter که توسط گوگل توسعه داده شده است و Cordova که توسط آپاچی عرضه شده است نام برد. البته React Native نیز یکی دیگر از ابزاری میباشد که شاخص محبوبیت آن بسیار سریع در حال رشد میباشد و در بین توسعه دهندگان از اقبال خوبی برخوردار است.

icon

اندروید چیست؟

اندروید یک سیستم عامل متن باز بوده که کدهای اصلی آنرا ، توسعه دهنده آن ؛ گوگل ؛ در اختیار عموم قرار داده است. این بدین معناست که هر کسی میتواند با توجه به سخت افزار خود تغییراتی را در آن اعمال کند که کاملا سازگار با آن به خوبی عمل نماید. همین امر موجب شده است این سیستم محبوبیتی خاص در بین کاربران بدست آورد و با بیش از دو میلیارد کاربر ، در رده پر کاربرترین سیستم عاملهای دنیا ، قرار گیرد. این سیستم عامل بر پایه لینوکس و برای دستگاه های موبایل و تبلت طراحی و ساخته شد ولی به مرور از این سیستم در لوازم خانگی از قبیل تلویزیون و ... استفاده گردید. اندروید مانند دیگر سیستمهای عامل دارای نسخه های مختلفی میباشد. Android Go یا Android One یک نسخه از اندروید می باشد که بسیار سبک و ساده میباشد که معمولا در دستگاه هایی با منابع محدود استفاده می شود. برخی از شرکتها از اندرویدهایی استفاده می کنند که خارج از اکوسیستم گوگل میباشد. در این سلسله یاداشتها ، قصد داریم به بررسی برنامه نویسی اپلیکیشن های اندروید ، بپردازیم.

icon

بهینه سازی وب سایت برای ربات گوگل

گوگل با استفاده از رباتهای خود وارد وب سایت ها شده و اطلاعات آن را به سرورهای گوگل منتقل می کنند. به این فرآیند اصطلاحا کراول کردن (Crawling) می گویند. به بیانی دیگر این رباتها در اینترنت می خزند و اطلاعات را جمع آوری و به سرورهای گوگل ارسال می کنند. انواع رباتهای گوگل : Googlebot desktop: این ربات به بررسی و ایندکس نسخه دسکتاپی وب سایت ها می ردازد. Googlebot mobile: این ربات به بررسی و ایندکس نسخه مویابلی سایت ها می پردازد. Googlebot Video: این ربات به بررسی ویدئوهای موجود در وب می پردازد. Googlebot Images: این ربات به پایش تصاویر موجود در وب می پردازد. Googlebot News: این ربات مختص سایت های خبری است. رباتهای دیگری هم هستند که هر کدام وظیفه های مختص خود را برای گوگل انجام میدهند بطور مثال ربات AdsBot کیفیت تبلیغ ها را چک می کند. همینطور ربات اپلیکشن اندروید گوگل به بررسی اپ های اندرویدی می پردازد. اما چگونه می توانیم بر عملکرد تمام رباتهای فعال در اینترنت ؛ بدون توجه به کمپانی های سازنده ؛ در خصوص وب سایتمان مدیریت نماییم. برای مدیریت دسترسی رباتها کافیست فایلی تحت عنوان robots.txt در دایرکتوری public_html ایجاد می نماییم و در آن مجوزهای دسترسی رباتها را به اطلاعات وب سایت را مشخص می نماییم.
user-agent: bing-bot 
disallow: /images
user-agent: *
allow: /gallery

icon

SSL و TSL

1- محافظت از اطلاعات : SSL مخفف Secure Socket Layer به معني «لايه اتصال امن» و پروتکلي جهت برقراري ارتباطات ايمن ميان سرويس دهنده و سرويس گيرنده در اينترنت است. در واقع اطلاعات با استفاده از این تکنولوژی رمز نگاری شده و سپس ارسال و دریافت میگردد و امنیت اطلاعات در طول مسیر تضمین میگردد. 2- احراز هویت : هنگام اخذ گواهینامه SSL یک فرآیند اعتبارسنجی صورت می گیرد که طی آن، بسته به نوع گواهینامه، هویت شما و سازمان متبوع سنجیده می‌شود. به بیانی دیگر اصالت وب سایت تایید میگردد. در سالهای ابتدایی استفاده از این تکنولوژی در بستر http کاهش سرعت بارگذاری اجتناب ناپذیر بود ولی با ارتقای این بستر به http/2 این مشکل مرتفع گردید. این پروتکل از طریق فشرده سازی اطلاعات و کاهش فرآیندهای مورد استفاده ، ۵۰ درصد زمان بارگذاری صفحات را کاهش داد.استفاده از https در ابتدای آدرس یک وب سایت نشان دهنده اخذ گواهینامه SSL توسط صاحب امتیازان آن وب سایت می باشد. نگارش جدید از تکنولوژی SSL که امروزه مورد استفاده قرار می گیرد TSL می باشد که برخی از نقاط ضعف SSL در آن بهبود پیدا کرده است که صحبت در مورد آن از حوصله بحث ما خارج می باشد.

icon

هماهنگی با گوشی‌های موبایل

قابلیت واکنش گرایی یا ریسپانسیو بودن ، این امکان را فراهم مینماید که وب سایت در تمام سایزهای صفحات نمایش ، بدون بهم ریختگی قابل مشاهده باشد. یا بعبارتی ساختار صفحات وب حفظ گردد. در سال 2015 گوگل رسماً اعلام کرد، سایت‌هایی که ریسپانسیو یا همان واکنش‌گرا نباشند به جایگاه‌های پایین‌تر نتایج گوگل نزول خواهند کرد.

icon

بارگذاری سریع وب سایت

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

icon

جذب بازدیدکنندگان

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

icon

بهینه سازی توضیحات متا و چگالی کلمات کلیدی

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

icon

بهینه‌سازی H1 و H2 و H3 و انکرتکست‌ها

در تولید محتوا سعی نمایید مطلب مورد نظر را با توجه به اهمیت موضوعات و زیر مجموعه مطالب ، با تگهای H1 و H2 و ... عنوان بندی نمایید. این امر باعث میگردد تاکید بر مطالب یک متن برای گوگل و همچنین بازدیدکنندگان وب سایت ، کاملا روشن باشد. بطور مثال شما قصد انتشار مطلبی را دارید ؛ در ابتدا موضوع اصلی مقاله را با استفاده از تگ h1 نمایش می دهید و سپس عنوان فصل مشروحه را با تگ h2 و در صورت چند بخشی بودن مطلب ، عنوان بخش یا زیرفصل را با تگ h3 منتشر می کنید. در واقع شما مطلب خود را از نظر اهمیت ، درجه بندی نموده اید. انکرتکست ها در واقع بخشی از یک متن هستند به خاطر اهمیت آن ، نیاز به توضیحات مبسوط تر در صفحه ای مجزا دارند و کلیک پذیر میباشند یعنی با قرار گرفتن روی آن کلمه از متن و کلیک بر روی آن ، مخاطب به صفحه دیگر هدایت می شود تا توضیحات تکمیلی در باره آن کلمه را مشاهده نماید. انتخاب عنوان انکرتکست یا همان کلمه کلیک پذیر ، دارای اهمیت میباشد. استفاده از کلمات کلیدی در این عناوین ، توصیه گردیده است.

icon

تگ title

تگ عنوان جهت نمایش عنوان وب سایت در سربرگ بروزر استفاده می شود. وقتی مطلبی را در گوگل جستجو می کنید همین عنوان وب سایت ها در نتایج نمایش داده می شوند. همین امر نشان دهنده اهمیت عنوان وب سایت در رویه های سئو می باشد. تا جای امکان سعی کنید کلمۀ کلیدی هدف و مشخصه های مهم را در عنوان صفحه قرار دهید. توجه داشته باشید که این کاراکتر های عنوان نباید بیشتر از 55 کاراکتر باشد.
<html>
 <head>
    <title>Website Title</title>    
 </head>
 <body>

 </body>
</html>

icon

تحقیق کلمات کلیدی

کلمات کلیدی همان کلماتی هستند که کاربران اینترنت جهت جستجو مطلبی خاص از این کلمات در موتورهای جستجو استفاده می کنند. بطور مثال شما قصد خرید یک کتاب با عنوان مزرعه حیوانات نوشته جرج اورول را دارید. با مراجعه به گوگل و استفاده از کلماتی مانند : فروشگاه آنلاین کتاب ، مزرعه حیوانات ، جرج اورول و اشکالی متفاوتی از این باب ، به هدف خود می رسید. از سویی دیگر صاحبان وب سایتها با استفاده از کلمات کلیدی همین درخواست سعی میکنند سایت خود را در صدر فهرست نتایج گوگل قرار داده تا شما را به بازدید از سایت خود ترقیب نمایند. پس بدست آوردن فهرستی از کلمات کلیدی که دارای بیشترین جستجو در حوزه فعالیت وب سایت شما را داشته اند ، امری بسیار مهم و تاثیر گذار در ارتقا وب سایت شما در نتایج جستجوی گوگل می باشد. استفاده از ابزار Google Keyword Planner برای بررسی و تهیه فهرستی از کلمات کلیدی مرتبط با کسب و کار شما ، بسیار مفید خواهد بود.همان‌طور که مشخص است ، این ابزار متعلق به گوگل است، در‌واقع Keyword Planne قسمتی از امکانات Google Adword است که برای تبلیغات در گوگل مورد استفاده قرار می‌گیرد. این ابزار، میزان جستجوی هر کلمه‌ای را که بخواهید، به شما نمایش می‌دهد، ولی توجه نمایید که Keyword Planner فقط و فقط تعداد جستجو‌ها را نشان می‌دهد. یعنی اگر شخصی عبارتی را در موتور جستجوی گوگل ، جستجو کند، این جستجو در Keyword Planner جزو جستجو‌ها محسوب می شود، حتی اگر شخص روی هیچ لینکی کلیک نکند. بیشترین کاربرد گوگل پلنر در درک میزان جست و جوی کلمات ، برای سایت ها و فروشگاه های اینترنتی است که می خواهند بدانند برای جذب ترافیک هدفمند یا همان تعدد بازدیدکننده ، از چه کلمه ها و عبارت هایی باید در بهینه سازی سایتشان استفاده کنند. از ابزارهای دیگر استخراج کلمات کلیدی می توان از Google Trends ،Microsoft Bing Ads Intelligence نام برد که استفاده از آنها می تواند بسیار مفید باشد.

icon

نکات مهم درباره URL

یک وب سایت متشکل از صفحات بهم پیوسته ؛ حاوی اطلاعات ؛ میباشد. هر صفحه ای دارای URL مختص خود میباشد. استفاده از URL های خوانا ؛ کلمات مرتبط با موضوع صفحه ؛ در امر سئو موثر میباشد. قرار دادن کلمات کلیدی در آدرس صفحات وبسایت از موارد مهم دیگر میباشد. استفاده از آدرسهای متعدد برای یک محتوا اصلا توصیه نمی گردد. تا حد امکان از پارامترهای داینامیک در آدرس ها ، استفاده نکنید. آدرس های کوتاه تر بهتر از آدرس های طولانی میباشد. طول آدرسها نباید بیشتر از 100 کاراکتر باشد.آدرس URL را با عنوان یا همان title صفحه هماهنگ کنید. از قرار دادن حروف اضافه در آدرس سایت حتی المقدور بپرهیزید. از کاراکترهایی که نیاز به Encoding دارند در آدرس صفحات استفاده نکنید. تعداد ریدایرکت ها را به کمتر از دو مورد محدود کنید. در آدرس ها از اسلش ( / ) های کمتری استفاده شود.آدرسها را رمز گذاری ننمایید و از کاراکترهای بزرگ الفبای انگلیسی و یا ترکیب از آنها استفاده نشود. استفاده بیش از حد از کلمات کلیدی در آدرسها توصیه نمی گردد. برای جدا نمودن کلمات از علامت دش (-) استفاده شود.

icon

شاخص های موثر

در ابتدا گوگل با استفاده از ابزار هوشمند خود ؛ معروف به Googlebot ؛ شروع به شناسایی و بررسی وب سایتها در تمام سرویس دهنده های وب در کل دنیا نموده و اطلاعات صفحات وبسایت های گوناگون را ؛ با ابزارهای معروف به Webcrawler ؛ جمع آوری و به سرورهای گوگل ارسال مینماید. سپس این اطلاعات با استفاده از الگوریتم هایی خاص در بانک اطلاعاتی گوگل ایندکس میگردد. این فرآیندها بشکل دایمی و متناوب انجام میگردد و اطلاعات وب سایتها بارها و بارها بررسی و شاخص گذاری می گردند. از عوامل موثر بر شاخص گذاری میتوان به عناوین زیر اشاره کرد: 1- بهینه کردن آدرس (URL) تمام صفحات سایت 2- کلمات کلیدی مناسب (Keyword Research) 3- بهینه سازی عنوان وب سایت یا Meta title 4- رعایت ساختار در نوشتار متن (بهینه‌سازی H1 و H2 و H3) 5- بهینه‌سازی انکرتکست‌ها 6- بهینه سازی توضیحات متا یا Meta Description 7- رعایت کردن چگالی کلمات کلیدی 8- لینک‌سازی داخل سایت 9- استفاده کردن از کدهای نشانه‌گذاری اسکیما 10- بهینه سازی تصاویر سایت 11- ریسپانسیو بودن سایت یا هماهنگی با گوشی‌های موبایل 12- تهیه گواهی SSL

icon

تاثیر سئو در کسب و کار

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

icon

مفهوم سئو

سئو به مجموعه فعالیتهایی مرتبط با وب سایتهای اینترنتی گفته می شود که باعث کسب رتبه ای مناسب در نتایج حاصله از موتورهای جستجو در اینترنت می شود. در بیان ساده وقتی مطلبی را در گوگل جستجو می کنیم ، گوگل بهترین نتایج را مطابق با نیاز شما ، فهرست بندی نموده و به شما نمایش می دهد. پیشنهادهای ابتدای فهرست گوگل با خواسته شما تطبیق بیشتری دارد و هر چه به پایین این فهرست حرکت کنیم این تطبیق کمرنگ تر میگردد. ولی گوگل چطور این فرآیند را مدیریت میکند؟ موتورهای جستجوی دیگری مانند Bing , AOL , DuckDuckGo , ASK و غیره چگونه عمل میکنند؟و در نهایت ما چطور می توانیم نام سایت خود را در صدر فهرست جستجوهای مرتبط قرار دهیم؟ پاسخ این سوالات را می توانید در فرآیند سئو بدست آورید. فرآیندی که شامل چند رویه و دستوالعمل نسبتا ساده می باشد. ولی حصول نتیجه مطلوب کمی زمانبر میباشد و باید صبور بود.

icon

گیت چیست؟

گیت یکی از پر کاربردترین نرم افزارهای کنترل ورژن میباشد. کنترل ورژن ابزاری است که تغییرات انجام شده در کدهای مورد توسعه را در دیتابیسی تحت عنوان Repository ذخیره نموده و ما با مراجعه به آن ، به تاریخچه ای از تغییرات ، زمان اعمال آن و چرایی این تغییرات ، دسترسی خواهیم داشت و این امکان برای ما فراهم میباشد که به وضعیت قبل از اعمال تغییرات دسترسی داشته باشیم.
این نرم افزارها در گونه Centralized و Distributed توسعه داده شده اند. در گونه اول ، تمام تغییرات در یک سرور مرکزی ثبت میگردند و تمام توسعه دهندگان از طریق همین سرور به کدها دسترسی داشته و همین منبع ، تنها محل دسترسی میباشد. نرم افزارهایی مانند مایکروسافت فاندیشن سرور از این تکنولوژی استفاده می کنند.
ولی در گونه دوم ، هر یک از توسعه دهندگان بطور مستقل و مجزا به کدها دسترسی داشته و پس از اعمال تغییرات ، اطلاعات آن مستقیما با تمام توسعه دهندگان آن مجموعه ، سینک و همگام سازی می گردد. نرم افزارهایی مانند گیت و مرکیولار از این تکنولوژی بهره مند میباشند.
برای استفاده از گیت ، کافیست به وب سایت توسعه دهنده Git مراجعه کرده و آخرین ورژن آن را دانلود و نصب نمایید. این نرم افزار رایگان و بشکل اپن سورس ارایه شده است.
بعد نصب از طریق Git Bash و یا پاورشل ویندوز با استفاده از دستورات خط فرمان گیت ، به مدیریت کدهای پروژه هایتان ، بپردازید. در انتهای همین یاداشت ، به معرفی برخی از دستورات گیت ، می پردازم.
1. git config --global user.name "Mo Soleimaniyun"
2. git config --global user.email "email@soleimaniyun.com"
3.  git config --global core.autocrlf true
4. git init
5. git status
6. git add *.txt
7. git add .
8. git commit -m  "First Commit"

icon

پترن سینگلتون

ابتدا مسئله و چالش پیش رو را در این پترن بررسی میکنیم. در برخی از پروژه ها ، شما نیاز دارید که از یک کلاس فقط یک نمونه ساخته شود و در طول برنامه از همان یک نمونه استفاده شود و تمام عملیات موردنیاز در همان یک کلاس انجام گردد و یا نیاز دارید یک نمونه از یک کلاس در سرتاسر پروژه قابل دسترسی باشد.
برای انجام این چالش ، بهترین راه حل را الگوی سینگلتون در اختیار شما قرار می دهد. این الگو در گروه الگوهای تکوینی قرار دارد و حوزه اثرگذاری آن در مبحث اشیاء می باشد.
در انتهای این یاداشت ، نمونه کد پیاده سازی شده با الگوی سینگلتون در زبان برنامه نویسی PHP جهت ایجاد یک Instance برای ارتباط با بانک اطلاعاتی میباشد.
<?php

class DB
{
    /**
     * Our single database client instance.
     * 
     * @var Database
     */
    private static $instance;

    /**
     * Disable instantiation.
     */
    private function __construct
    {
        // Private to disabled instantiation.
    }

    /**
     * Create or retrieve the instance of our database client.
     * 
     * @return Database
     */
    public static function getInstance()
    {
        if (is_null(static::$instance)) {
            static::$instance = new Database;
            static::$instance->setHost('127.0.0.1');
            static::$instance->setPort(3306);
            static::$instance->setUsername('root');
            static::$instance->setPassword('password');
        }

        return static::$instance;
    }

    /**
     * Disable the cloning of this class.
     * 
     * @return void
     */
    final public function __clone()
    {
        throw new Exception('Feature disabled.');
    }

    /**
     * Disable the wakeup of this class.
     * 
     * @return void
     */
    final public function __wakeup()
    {
        throw new Exception('Feature disabled.');
    }
}

icon

دیزاین پترن

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

ادامه دارد...

icon

نسخه نرم افزار

حتما وقتی به دنبال یک نرم افزار هستید یکی از پارامترهای مطرح برای شما ورژن آن میباشد. ورژن یا نسخه نرم افزار بیان کننده چهار عامل مهم محصول عرضه شده به بازار میباشد. این چهار پارامتر شامل Major , Minor , Reversion و Build می باشد که در این مطلب به بررسی آن می پردازیم.
Major : این پارامتر نشان دهنده نسخه جدید نرم افزار میباشد. این مقدار وقتی تغییر میکند که تغییراتی بزرگ و اساسی در برنامه شکل گرفته باشد و ویژگی های برنامه به کلی عوض شده باشد.
Minor : این مقدار وقتی تغییر میکند که تغییرات کوچک و کم در نرم افزار شکل گرفته باشد و فقط برخی از ویژگی های آن کمی تغییر کرده باشند.
Rivision : این پارامتر مربوط به بازبینی در نرم افزار میباشد. این مقدار زمانی تغییر می کند که باگ ها و اشکلات برنامه بهبود یافته باشد.
Build : این مقدار موقعی تغییر میکند که برنامه از حالت آزمایشی و غیر پایدار خارج شده باشد یا به عبارتی نسخه نهایی نرم افزار باشد که معمولا بالاتر از 1 به معنای نهایی بودن و زیر آن به معنای آزمایشی بودن می باشد.
Major.Minor.Build.Revision

icon

مدیر محصول

مدیریت محصول، به مجموعه‌ای از فرآیندهای به‌هم پیوسته ای که در طول حیات چرخه محصول انجام می گردد با هدف کسب رضایت مشتری با ارایه محصولی مطلوب ، گفته می شود.
مدیر محصول هم پل ارتباطی بین تیم توسعه محصول ، تجربه کاربری و در نهایت کسب و کار است. اجازه بدید وظایف مدیر محصول رو در هر یک از این سه حوزه بررسی کنیم. اولین وظیفه مدیر محصول کمک کردن به مدیران در شناخت اهداف کسب و کار و همچنین اهداف محصول میباشد. مدیر محصول خواسته های مدیران شرکت به تیم توسعه محصول و همچنین نیازمندی های تیم توسعه محصول را به مدیران شرکت ؛ با زبان فنی و اداری مختص خود ؛ منتقل می کند.
مدیر محصول با استفاده از بازخورد مشتریان و تطبیق آن با اهداف کسب و کار ، تیم تجربه کاربری را جهت طراحی محصولی مطلوب تر هدایت می نماید.
مدیر محصول وظیفه ایجاد ارتباط بین تیم تجربه کاربری و تیم توسعه را هم بعهده دارد. یعنی بازخورد کاربران را از تجربه استفاده از محصول را به زبان ساده دریافت میکند و با زبان فنی به تیم تجربه کاربری و تیم توسعه منتقل می کند.
مدیر محصول باید دارای مهارتهایی مانند شناخت بازار ، آشنایی فنی توسعه محصول ، روابط عمومی مناسب جهت ایجاد ارتباط با مشتریان ، فن بیان خوب جهت متقاعد کردن مدیران سازمان ، رهبری و هدایت باشد.
نکات مهمی که از مدیر محصول باید بدانیم :
مدیر محصول، مدیر مهندسان، طراحان و هیچ کس دیگری نیست ولی مسئول نهایی موفقیت محصول تولید شده است.
مدیر محصول، بازاریاب نیست ولی میتواند نقشه راهی برای بازاریابی ترسیم کند.
مدیر محصول، مدیر پروژه نیست ولی میتواند با تک تک افراد تیم توسعه تعامل داشته باشد.
و در نهایت مدیریت محصول پر از چالش‌ها و فرصت‌هایی برای یادگیری و کمک به موفقیتِ سازمان است.

icon

قوانین حاکم بر تراکنش ها

ACID که مخفف عبارات Atomicity , Consistency , Isolation , Durability میباشد ، مبین ویژه گی های تراکنش های قابل اعمال بر بانک اطلاعاتی می باشد ، به زبان ساده هر تراکنش قابل اجرا در بانک اطلاعاتی که شامل عملیات خواندن ، افزودن ، حذف و یا ویرایش اطلاعات ؛ CRUD ؛ باید دارای مشخصه های مذکور باشد تا تضمین کننده صحت اطلاعات در فرآیند ذخیره و بازیابی آن در بانک اطلاعاتی باشد.
1- ویژه گی اتمیستی Atomicity
اگر تراکنشی شامل چند عملیات باشد یا همه عملیات ها انجام می گیرد یا هیچ کدام اعمال نمی شوند. به زبان ساده تر اگر تراکنشی شامل 5 عملیات باشد کافیست یکی از این عملیاتها در اجرا به مشکل برخورد کند ، مابقی عملیاتها ملغی می گردد.
2- ویژه گی ثبات Consistency
اگر در تراکنشی بطور مثال قرار باشد 1000 ریال از حسابی کسر و به حسابی دیگر واریز گردد ، مبلغ مذکور از حساب اول کسر گردد ولی هنگام واریز به حساب دوم مشکلی بروز نماید و عملیات واریز انجام نگردد ، باید مبلغ کسر شده به حساب اول بازگردد.
3- ویژه گی ایزوله بودن Isolation
تمام تراکنش ها بطور مجزا اجرا می شوند و هیچ تراکنشی مانع اجرای تراکنش دیگر نمی شود.
4- ویژه گی پایداری Durability
اگر اجرای تراکنشی با موفقیت انجام شود ، تغییرات دیتابیس باید در حافظه فیزیکی ثبت قطعی گردد تا در صورت بروز مشکل فنی بطور مثال قطعی برق ، به اطلاعات دیتابیس آسیبی وارد نگردد و آخرین تغییرات صورت گرفته ذخیره شده باشد.

icon

متد اسکرام

اسکرام چارچوبی برای توسعه نرم افزار در جهت کاهش مشکلات می باشد. اسکرام پیشنهادهای بهبود و تسریع اجرای پروژه را ارایه می کند و سعی در بهینه سازی مدیریت پروژه دارد. اسکرام یکی متدهای رایج و پرطرفدار تفکر اجایل می باشد. حال به بررسی مراحل پیاده سازی اسکرام می پردازیم.
مرحله اول: تهیه سند بالادستی Product Backlog
با مشارکت تیم توسعه دهنده ، فهرستی از تمام فعالیتهای مورد نیاز پروژه را تهیه می کنیم.
مرحله دوم: فازبندی پروژه
پروژه را به فازهای مجزا تقسیم می کنیم و برای انجام هر فاز ، یک تیم را مستقر می کنیم. با استفاده از نمودار گانت ، زمان اجرای فازها ، فعالیتهای موازی یا سری و ... مشخص می کنیم.
مرحله سوم: برنامه‌ریزی اسپرینت و تهیه سند اسپرینت Sprint Backlog
اسپرینت یک دوره زمانی تکرارشونده در اسکرام است ؛ بازه زمانی یک تا دو هفته و ثابت ؛ که به تکمیل محصول منجر می‌شود. هر اسپرینت هدف و دستاوردی دارد و ضمنا نحوه دستیابی به هدف کاملا مشخص میباشد. در جلسات اسپرینت وظایف هر فرد مشخص می شود. در برگه های مختص هر فرد شرح وظایف آن نوشته می شود و در برد اسکرام در ستون صف انجام کار قرار میگیرد. برد مذکور شامل سه ستون با عناوین ، صف انجام کار ، در حال انجام و انجام شده ، می باشد.
مرحله چهارم: اجرای اسپرینت
اعضای تیم هر روز بمدت 10 الی 15 دقیقه در یک جلسه شرکت می کنند و آخرین وضیت فعالیت خود در برد اسکرام بروز رسانی می کنند.
مرحله پنجم: تحویل و بررسی اسپرینت
وقتی یک اسپرینت به پایان می رسد ، به اسکرام مستر تحویل داده شده و مورد بررسی قرار می‌گیرد. کار انجام‌شده با سند اسپرینت و سند Product Backlog تطبیق داده می شود و گزارش کلی از نحوه انجام اسپرینت داده می‌شود که به گزارش اسپرینت معروف است که در آن به چالش‌ها و مشکلات اسپرینت پرداخته می‌شود تا از بروز آن در آینده ممانعت بعمل آید. در صورت نیاز، یک جلسه کوتاه هم برای جمع بندی کل اسپرینت برگزار می‌شود.
مرحله ششم: بازنگری اسپرینت Sprint Retrospective
در صورتیکه اسپرینت با مشکلی روبرو شود و کامل به پایان نرسد و یا دارای نواقصی باشد نیاز به بازنگری اسپرینت میباشد. نقاط ضعف و قوت کار، راهکارهای بهبود اسپرینت یا عملکرد افراد در جلسه ای با حضور اعضای تیم بررسی می گردد و مجددا اسپرینت را تکمیل و تحویل می دهند.

icon

رویکرد چابک

اجایل را می توان یک فرهنگ ، طرز تفکر و یا یک بینش در مدیریت توسعه نرم افزار در یک سازمان و یا گروه توسعه دهنده ، دانست که شامل مجموعه روشهایی است که باعث می شود تا نرم افزار تولید شده کاملا با نیازهای مشتریان مطابقت داشته باشد. البته متدولوژی اجایل طیف گسترده ای از فعالیتها را در بر می گیرد که البته در این مجال ، تمرکز ما بر توسعه نرم افزار میباشد .
مانیفست یا همان بیانیه اجایل شامل 12 اصل ارزشمند ، به شرح زیر میباشد :
1. ایجاد رضایت در مشتری از طریق تحویل زودهنگام و مستمر نرم افزارهای ارزشمند.
2. استقبال از تغییرات.
3. تحویل مکرر نرم افزار کارامد.
4. همکاری هر روزه در طول پروژه.
5. ایجاد پروژه ها پیرامون افراد با انگیزه که برای انجام کار مورد اطمینان هستند.
6. مکالمه حضوری هر زمان که ممکن است.
7. نرم افزار کارامد شاخص اصلی پیشرفت است.
8. حفظ سرعت ثابت.
9. توجه مستمر به تعالی فنی و طراحی خوب.
10. حفظ سادگی ؛ هنر به حداکثر رساندن میزان کار انجام نشده ؛ ضروری است.
11. بهترین معماری ها، الزامات و طرح ها از تیم های دارای سازمان دهی درونی پدیدار می شوند.
12. در مورد چگونگی مؤثرتر شدن تأمل کنید، سپس در فواصل منظم آن را محقق کنید.

icon

اصول سالید

اصول سالید شامل 5 اصل در برنامه نویسی شی گرا میباشد که رعایت این اصول در فاز نگهداری کد ، توسعه و یا ایجاد تغییر در آن را ساده تر می کند و خوانایی و فهم کدها را برای توسعه دهنده ها آسان میکند. سالید ( SOLID ) مخفف عبارات Single responsibility ، Open/closed ، Liskov substitution ، Interface segregation و Dependency inversion میباشد که مختصر توضیحاتی در مورد این 5 پارامتر موثر در پیاده سازی پارادایم شی گرایی ، تقدیم حضورتان می گردد.
1. اصل تک مسئولیتی (Single Responsibility Principle) : هر کلاسی را برای یک مسئولیت و انجام عملکردی واحد ایجاد و استفاده نماییم.
2. اصل باز - بسته (Open/Closed Principle) : تمام بخشهای و واحدهای نرم افزار ، اعم از کلاس ها ، توابع و ماژولها و غیره ، برای توسعه دادن وضعیتی باز و برای تغییر دادن وضعیتی بسته داشته باشند.
3. اصل جایگزینی لیسکوف (Liskov Substitution Principle) : اگر X یک زیر کلاس از Y باشد، آبجکت‌های نوع Y باید بتوانند بدون تغییر دادن کد برنامه با آبجکت‌های نوع X جایگزین شوند.
4. اصل جداسازی اینترفیس‌ها (Interface Segregation Principle) : از پیاده سازی متدهایی که عملا کارکردی در کلاسهای یک اینترفیس ندارند باید اجتناب گردد.
5. اصل وارونگی وابستگی (Dependency Inversion Principle) : وابستگی ها باید از سطوح پایین به بالا پیاده سازی شوند.

icon

مشخصه های شی گرایی

یکی از پارادایم های برنامه نویسی که از اهمیت بسیاری در بین توسعه دهندگان برخوردار است ، برنامه نویسی شی گرا میباشد. این پارادایم مبتنی بر مفهوم اشیا و موجودیت میباشد که می تواند حاوی داده و یا کد باشد.
در برنامه نویسی شی گرا با مفهومی به نام کلاس آشنا می شویم که متغیرها و توابع مرتبط ، در آن تجمیع می شوند و اشیای موجود در برنامه از نوع همین کلاس ها ، ساخته می شوند. همانطور که گفتیم کلاس ها دارای توابع و متغیرهایی می باشند که تحت عنوان متد (Method) و ویژه گی‌ (Property or Attributes) قابل دسترسی می باشند.
در کلاسها برای دسترسی به متدها و ویژه گی ها ، سه سطح مختلف دسترسی تعیین گردیده است که به شرح زیر می باشد :
Public: به متغیرها و متدهایی گفته می‌شود که از خارج کلاس قابل دسترسی هستند.
Protected: به متغیرها و متدهایی گفته می‌شود که فقط از کلاس هایی قابل دسترسی هستند که از کلاس فعلی ارث برده اند.
Private: به متغیرها و متدهایی گفته می‌شود که از خارج کلاس قابل دسترسی نیستند.
اگر چه پیاده سازی نرم افزارها در پارادایم شی گرایی کمی پیچیده و نیاز به تحلیل و آنالیز دقیقی دارد ولی در فاز تست و همچنین در مرحله نگهداری و یا توسعه ، کم هزینه خواهد بود.
حال به بررسی چند مفهوم بسیار مهم شی گرایی در برنامه نویسی می پردازیم. اولین مفهوم حایز اهمیت در برنامه نویسی شی گرا ، خاصیت کپسوله سازی می باشد. یعنی از بیرون کلاس به پروپرتی ها درون کلاس دسترسی مستقیم نباشد و با استفاده از متدهایی پروپرتی ها مقدار دهی شوند و یا مقادیر آنها قابل دسترسی باشند.
از دیگر مفاهیم برنامه نویسی شی گرا ، خاصیت انتزاع در کلاس ها می باشد. یعنی کلاسها تا جای ممکن باید مستقل باشند. این امر باعث ایجاد سهولت در بکار گیری کلاس هایمان میشود و از طرفی تغییر در چگونگی اجرای روند پردازشها ، هیچ خللی در اجرای بخشهای دیگر برنامه ایجاد نمی کند.
ارث‌بری یکی دیگر از مفاهیم بسیار کاربردی زبان‌های برنامه‌نویسی شی‌گراست. ارث‌بری کمک می‌کند که کلاس‌ها بتوانند پروپرتی ها و متدها را از کلاس دیگری به ارث ببرند و در عین حال کارکرد خاص خودشان را نیز داشته باشند.
مفهوم دیگری که شی گرایی برایمان به ارمغان آورده است مفهوم چند ریختی میباشد. یعنی ما بتوانیم یک کلاس را در روشهای مختلفی پیاده سازی نماییم بدون اینکه نگران ارتباط آن با کلاسهای دیگر باشیم.
// Class
class Fruit {
  // Properties
  public $name;
  public $color;

  // Methods
  function set_name($name) {
    $this->name = $name;
  }
  function get_name() {
    return $this->name;
  }
}

-------------------------------------------------------------------------------------------------------

// Constructor and Destructor
class Fruit {
  public $name;
  public $color;

  function __construct($name) {
    $this->name = $name;
  }

  function __destruct() {
    echo "The fruit is {$this->name}.";
  }

  function get_name() {
    return $this->name;
  }
}

$apple = new Fruit("Apple");
echo $apple->get_name();

-------------------------------------------------------------------------------------------------------

// Access Modifiers
class Fruit {
  public $name;
  protected $color;
  private $weight;
}

$mango = new Fruit();
$mango->name = 'Mango'; // OK
$mango->color = 'Yellow'; // ERROR
$mango->weight = '300'; // ERROR

-------------------------------------------------------------------------------------------------------

// Inheritance
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}

// Strawberry is inherited from Fruit
class Strawberry extends Fruit {
  public function message() {
    echo "Am I a fruit or a berry? ";
  }
}
$strawberry = new Strawberry("Strawberry", "red");
$strawberry->message();
$strawberry->intro();

-------------------------------------------------------------------------------------------------------

// Abstract Classes
// Parent class
abstract class Car {
  public $name;
  public function __construct($name) {
    $this->name = $name;
  }
  abstract public function intro() : string;
}

// Child classes
class Audi extends Car {
  public function intro() : string {
    return "Choose German quality! I'm an $this->name!";
  }
}

class Volvo extends Car {
  public function intro() : string {
    return "Proud to be Swedish! I'm a $this->name!";
  }
}

class Citroen extends Car {
  public function intro() : string {
    return "French extravagance! I'm a $this->name!";
  }
}

// Create objects from the child classes
$audi = new audi("Audi");
echo $audi->intro();
echo "<br>";

$volvo = new volvo("Volvo");
echo $volvo->intro();
echo "<br>";

$citroen = new citroen("Citroen");
echo $citroen->intro();

-------------------------------------------------------------------------------------------------------

// Interfaces
// Interface definition
interface Animal {
  public function makeSound();
}

// Class definitions
class Cat implements Animal {
  public function makeSound() {
    echo " Meow ";
  }
}

class Dog implements Animal {
  public function makeSound() {
    echo " Bark ";
  }
}

class Mouse implements Animal {
  public function makeSound() {
    echo " Squeak ";
  }
}

// Create a list of animals
$cat = new Cat();
$dog = new Dog();
$mouse = new Mouse();
$animals = array($cat, $dog, $mouse);

// Tell the animals to make a sound
foreach($animals as $animal) {
  $animal->makeSound();
}

-------------------------------------------------------------------------------------------------------

// Traits
trait message1 {
  public function msg1() {
    echo "OOP is fun! ";
  }
}

trait message2 {
  public function msg2() {
    echo "OOP reduces code duplication!";
  }
}

class Welcome {
  use message1;
}

class Welcome2 {
  use message1, message2;
}

$obj = new Welcome();
$obj->msg1();
echo "<br>";

$obj2 = new Welcome2();
$obj2->msg1();
$obj2->msg2();

icon

زبان مدل سازی یکپارچه

زبان مدل سازی یکپارچه Unified Modeling Language یا به اختصار UML زبانی است عامه فهم، توسعه پذیر و مدلساز که در زمینه مهندسی نرم افزار با هدف ارایه روشی استاندارد برای توصیف و تجسم طراحی یک سیستم بکاربرده می شود.
UML روشی برای توسعه نرم افزار نمی باشد ولی به گونه ای طراحی شده است که با روشهای مختلف تولید و توسعه نرم افزار سازگار میباشد. از جمله روشهای پیشرویی که در این زبان لحاظ گردیده روش توسعه شی گرا میباشد. در متد RUP تاکید خاصی بر UML در مدلسازی توسعه نرم افزار دارد. مراحل طراحی و تحلیل نرم افزار بطور کلی مطابق دستورالعمل زیر می باشد:
1- تهیه سند حوزه و میدان عملکرد پروژه
2- مطالعات امکان سنجی
3- ترسیم Context Diagram
4- تعیین موجودیتهای خارجی
5- مدل سازی Use Case ها
6- تهیه سناریو برای Use Case ها
7- تشخیص Actor ها و روابط بین آنها
8- ترسیم نمودارهای Sequence و Collaboration برای Use case ها
9- ترسیم نمودارهای State و Activity در صورت لزوم
10- استخراج فهرست کلاسهای کاندید
11- استخراج فهرست کلاسهای واقعی
12- تعیین Attribute ها و Operation ها در هر کلاس
13- تشخیص انواع لینکهای بین کلاس ها
14- ایجاد انواع جداول و بهینه سازی آنها

icon

چگونه یک نرم افزار توسعه می یابد؟

روشهای برنامه نویسی که تاکنون مورد استفاده قرار گرفته اند عمدتا تحت عناوین فرآیند محور ، شی محور و تابع محور گروه بندی میگردند. هر یک از روشهای برنامه نویسی ذکر شده ، بنوبه خود دارای سیکل حیات مشخص خود میباشند. با توجه به سیکل حیات نرم افزار ،متدولوژی های گوناگون تولید وجود دارد که این متدها فازهای مختص خود را جهت تولید و توسعه نرم افزار ، دارند.
در روش قدیمی برنامه نویسی فرآیند محور، دوره حیات نرم افزار TLC نامیده میشود. تی ال سی دارای متدولوژی های مختلف تولید میباشد که پرکاربردترین متدولوژی آن ، مدل آبشاری میباشد. مدل آبشاری دارای 7 فاز در توسعه نرم افزار میباشد که شامل فازهای زیر میباشد:
1- مهندسی سیستم ، 2- آنالیز نیازمندیها ، 3- طراحی ، 4- ساخت ، 5- آزمایش ، 6- نصب ، 7- نگهداری
یکی دیگر از روشهای برنامه نویسی که دارای محبوبیت زیادی در بین توسعه دهنگان نرم افزار میباشد روش شی محور یا همان شی گرا میباشد. چرخه حیات سیستم در این روش از برنامه نویسی را OODLC می نامند. از مزایای برنامه نویسی شی گرا میتوان به استقلال هویتی اجزا ، پایداری سیستم ، قابلیت نگهداری ، قابلیت استفاده مجدد اجزا و داشتن دید واقعی به دنیای اطراف ، اشاره نمود.
متد یکپارچه رشنال یا RUP متدی مبتنی بر توسعه شی گرا میباشد که قابلیت تکرار در مراحل تولید و توسعه نرم افزار در این متد لحاظ گردیده است. این متدولوژی مشمول بر 4 فاز و 5 روال در هر فاز میباشد. فازها عبارتند از : 1- برآورد ، 2- بسط ، 3- ساخت ، 4- انتقال و روال هایی که در هر فاز انجام میگردد عبارتند از : 1- نیازمندی ، 2- آنالیز ، 3- طراحی ، 4- جهت گیری ، 5- آزمایش
team work