فصل7_بخش سوم:[ Hash And Hash Code ]

الگوریتم های متفاوتی برای ایجاد String در هم آمیخته که همان به اختصار [ Hash ] نامیده می شود وجود دارد .

و اساسا پیدایش این String در هم آمیخته برای جلوگیری از لو رفتن User namr و مخصوصا password پس از هک شدن به کارگرفته می شود .

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

به طور کلی الگوریتم های ایجاد Hash دو نوع است :

1_ یک طرفه : مثل MD5

خودتان اگر می خواهید براساس الگوریتم یا همان( Hash table )Md5 یا ShA1 یک عدد Hash طبق عبارتی که می نویسید پیدا کنید کافی است در اینترنت سرچ کنید :MD5 hash encrypt

جالب توجه است String که به یک عبارت خاص اختصاص می دهد در صورت تکرار همان عبارت آن String عینا تکرار می شود .

2_دو طرفه : مثل HTTPS که به طور کلی مربوط به حفاظت شبکه است .

حالا از مبحث String در هم پیچیده Hash خارج می شویم و به بحث شیرین ()hashCode. وارد می شویم .

اصلا کاربرد اصلی این عبارت درچیست را ابتدا می خواهیم بدانیم .

هنگامی که می خواهیم پیش بینی کنیم که آیا متغییری با متغییر دیگری برابر است یا نه از عبارت (()hashCode.اسم آن متغییر )println ان متغییر استفاده می کنیم و String حاصل شده را را با همین روال با متغییر دیگر بدست می آوریم و دو String در هم آمیخته را باهم مقایسه می کنیم اگر کاملا برابر بودند دو متغییر نیز با هم برابرند . حالا خواه متغییر مساوی با اعمال پیچیده ای باشد خواه مساوی با یک دیتا کلاس باشد (یعنی Object از آن دیتا کلاس باشد ).

به شکل های زیر با دقت توجه کنید:

>
شکل1:data class.kt

>
شکل2:main.kt

>
شکل3: کنسول Intelij Idea

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

فصل7_بخش دوم:(program stack ) و (program heap)

بخشی از حافظه RAMهمیشه در اختیار سیستم عامل قرار می گیرد .

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

در زبان کاتلین JVM کار های ردیف کردن اجرای برنامه را انجام می دهد .که حافظه ای که JVM در RAM پر می کند هم مربوط به حافظه Heap (program heap ) است و هم مربوط به حافظه (program stack ) stack است.

چرا به program stack لقب dayta structure (ساختمان داده )استک را می دهند؟

به این دلیل که نحوه ذخیره سازی در آن به شیوه L I F O (laste in first oute) [ آخرین ورودی اولین خروجی ]می باشد .

نحوه کارJVM با این دو بخش از حافظه RAM را شرح دهید:

در حافظهstack دو نحوه ذخیره سازی داریم

1_ذخیره سازی data type های اولیه که به اختصار به آن ها(value type )می گویند که شامل data type های Number(به طور کلی تمامی زیر مجموعه هایش نیز شامل می شود ), Char , Boolean , String که نوع اول ذخیره سازی است و به طور مستقیم این کار انجام می شود .

2_ذخیره سازی سایر data type ها که به صورت یک آدرس (که یک کد هگزا دسیمال است )که مربوط به شروع کد هایمان (مربوط به تعریف متغییر با نوع داده ای به غیر از انواع داده های بالا )که به صورت باینری (صفر و یک )در حافظه heap ذخیره می شود می باشد .(که به این نوع داده ها به اختصار poinert refrence )[ نشانگر مرجع ] می گویند .

در حافظه heap فقط یک نوع ذخیره سازی داریم :

Refrence Type که همانطور که در بالا اشاره شد هر Pointer Refrence نشانگر آغازین کد ها به صورت عدد هگزا دسیمال آدرس می پذیرد .

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

>
شکل1:data class

>
شکل2:file.kt

>
شکل3: کنسول Intelij Idea

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

فصل7_ بخش اول:آشنایی مختصر با سخت افزار

می خواهیم به طور کوتاه و گذرا ببینیم در سیستم کامپیوتری و لب تاب ها چه می گذرد و هرکدام از قطعات چه فایده ای برایمان دارد؟

1_Hard Disk Drive به طور اختصار HDD اکثرا به آن ها هارد نیز می گویند.

2_ Solid State Drive به طور اختصار SSD که قیمتش اش نسبت به هارد HDD بیشتر است.

حافظه اکسترنال یعنی به صورت USBبه کامپیوتر وصل می شود و حافظه اینترنال یعنی به صورت بدون روکش(کیس) در سیستم کامپیوتر یا لب تاب یا گوشی هوشمند به کار می رود.

حافظه HHD سرعت خواندن و نوشتن شان نسبت به SSD پایین تر است (نکته معمولا سرعت خواندن از نوشتن بالاتر است)

پارتیشن بندی ویندوز ارتباط مستقیم با تعداد پارتیشن های این دو حافظه دائمی دارد به طوریکه اگر 2 پارتیشن HHDداشته باشیم و 5 پارتیشن SSD داشته باشیم می توانیم 7 پارتیشن در مجموع داشته باشیم که البته برخی پارتیشن های ویندوز مخفی هستند که فایل های بوت سیستمی و سایر پارتیشن های مخفی وجود دارد که البته به طور معمول هر چه عمر کیس بالا تر رود و ویندوز های جدید تر را تجربه کند تعداد پارتیشن های مخفی و حجم آن ها بالاتر خواهد رفت.

SSDها سرعت بالاتری دارند و نسبت به ضربه و تکان دادن مقاوم ترند زمانی که هارد های HHDضربه بخورند یا تکان داده شوند مخصوصا هنگامی که در حال کار کردن هستند بد سکتور می شوند یعنی بعضی از فایل ها را باز نمی کنند

یا ویندوز در هنگام بالا آمدن یا کارکردن با ویندوز با مشکل مواجه می شویم

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

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

کار اصلی HHD و SSD نگهداری فایل ها می باشد.

3_Random Access Memoryکه به اختصار RAM نامیده می شود.

و فایل هایی در حال اجرا درRAM و فایل هاکی که ذخیره کردیم در حافظه کامپیوتر قرار می گیرد

از نظر سرعت RAM سریع تر از SSD و خیلی سریع تر از HHD می باشد هنگام اجرای برنامه اطلاعات از روی حافظه دائمی به سوی حافظه موقت می رود تا برنامه

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

4_Centeral Pro vexing Unit که به طور اختصار CPU

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

در واقع اطلاعات از ورودی (کیبورد) وارد CPUشده و از آنجا وارد RAM می شود سپس اطلاعات از طریق صفحه نمایش نشان داده خواهد شد

هر کاری که قابل انجام باشد CPU انجامش می دهد مثل بالا آوردن همین صفحه وبلاگ یا تماشای یک ویدئوی خنده دار کوتاه

و امروزه CPUهای بسیار قدرتمندی ایجاد شده اند که توان بسیار بالایی دارند به طوریکه یک برنامه را قادرند باز کنند و پروژه ای که نوشته ایم را به راحتی در حد چند میلی ثانیه اجرا خواهند کرد.

نکته :برای انتقال گرما و در نتیجه خنک کردن اندازه یک نخود کوچک خمیر سیلیکون در سطح زیرین CPUمی زنند و سپس آن را محکم می کنند.

تا فن به راحتی cpu را خنک کند.

5_کارت گرافیک (graphics card)

انجام کار های گرافیکی مثل اجرای بازی های به روز یا کمک کردن به طراحان انیمیشن یا بازی برای اجرای برنامه برنامه های سنگینی که با آن کار می کنند.

از آنجایی که کارت گرافیک کمک به پردازش می کند ممکن است بسیار داغ شود بنابراین از یک فن تا چهارتا فن در آن تعبیه شده است

6_منبع تغذیه:

تبدیلات انرژی را انجام می دهد تا هرقسمت درحال بهینه کار خود را انجام دهد.

7_مادر بورد یا main board(برد اصلی) :

مادربورد وسیله ارتباط بین آنچه که در این بخش خواندیم می باشد.

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

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

فصل6_ بخش شانزدهم:ScopeFunctions(let,run,with,apply,also)

کاربرد اصلی آنچه توضیح می دهیم در برنامه نویسی اندروید می باشد.

همانطور که در شکل های زیر می بینید می توانیم برای let, run , with مقدار بازگشتی تعریف کرد و در آخرین خط همان مقدار بازگشتی ما می باشد ولی برای apply, also مقدار بازگشتی به صورت پیش فرض و دایمی همان کلاسی است که قبل از آنها آمده است می باشد .

و همانطور که در شکل های زیر فقط let , also به صورت لاندا فانکشنی می باشد(از it استفاده شده)ولی run , whit , apply به صورت this استفاده شده برای استفاده از آن ها .

و همانطور که می بینید در بین این 5 کاراکتر تنها when است که می بایست از بیرون نوشته شود و به صورت تو در تو نوشته شود .

به شکل های زیر با دقت نگاه کنید :

>
شکل1:data class.kt

>
شکل2:file main.kt

>
شکل3: کنسول Intelij Idea

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

فصل6_ بخش پانزدهم:پروژه(Project)

سعی کنید باتوجه به تمامی مطالبی که تا به حال آموختید پروژه زیر را بنویسید :

در یک شرکت با یک نرم افزار که شامل 2 منو است 2 کار انجام می شود :

کار اول:ثبت کارمند :نام , نام خانوادگی , شماره همراه , کد ملی و سال تولد دریافت می شود و در یک لیست ذخیره می شود .

کار دوم: ثبت مرخصی :ابتدا کد ملی را می گیرد و چک می کند که آیا در لیست کارمندان است یا نه سپس از گارمند درخواست وارد کردن تاریخ مرخصی را می کند و در نهایت آیا برای رفتن به مرخصی اجازه دارد یا نه با وارد کردن عدد 1 یا زدن مستقیم دکمه 'Enter 'از او پرسیده می شود .

در نهایت پس از بستن بزنامه و پایان کار, کل اطلاعات وارده چاپ می شود .

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

راهنمایی:

دو دیتا کلاس بسازید

عنوان اولی تعطیلات و عنوان دومی استخدام باشد .

دیتا های مربوط به تعطیلات:تاریخ و وضعیت مرخصی

دیتا های مربوط به کارمند :نام و نام خانوادگی و شماره همراه و کد ملی و سال تولد و یک mutableListOf<تعطیلات>()به نام استراحت بسازید .

سپس در main.kt تان در بدنه ()fun main دو ()mutableListOf که جنریک یکی تعطیلات و جنریک دیگری استخدام است بسازید به نام های استخدام ها و استراحت ها .

سپس با استفاده از(true) whileبرنامه را باز نگه دارید و سپس با استفاده از نوشتن یک منو و پس از آن ()readln().toIntگرفتن از آن عدد مورد نظر را وارد کنید

کار اول را انجام دهید . و یک object از دیتا کلاس استخدام بسازید و دانه دانه اطلاعات گرفته شده را جایگزین primary constructor آن کنید .

و در نهایت به استخدام ها()add اش کنید.

نکته :به جای لیست مرخصی در اینجا یک mutableListOfخالی وارد کنید .

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

ابتدا چاپ میکنیم کد ملی خود را وارد کنید

سپس کد ملی را از کاربر می گیریم

سپس با نوشتن شرط

({it==inputeNationalCode}employees.none)if

و کمی جلوتر از if در خط بعد می نویسیم

(" کد ملی شما نامعتبر است ")throw Exception

و هم میزیان با if در خط بعد می نویسیم

("کد ملی شما معتبر است ")println

سپس بقیه کد های مرتبط را می نویسیم

یعنی ابتدا اطلاعات خواسته شده را در متغییر هایی که نامگذاری می کنید با ()readln تعریف کنید

سپس هرکدام را هنگام ساختن object از دیتا کلاس تعطیلات در primary constructor جایگزین می کنیم .

و در نهایت شی ایی که ساخته ایم را ()add اش می کنیم به استراحت ها .

و پس از نوشتن شرط خروج از برنامه

و بستن کل بدنه when کل when () با بدنه اش را در بدنه try و بعد از اتمام بدنهtry می نویسیم

(e:Exception)catch

سپس بدنه آن که تنها عضو آن

(e.message)println

می نویسیم .

و در نهایت لیست استخدام ها را با {}forEach پرینت(چاپ) میکنیم .

شکل های زیر مطابق آنچه گفته شد می باشد :

>
شکل1:data class.kt

>
شکل2:data class.kt

>
شکل3:file.kt

>
ادامه شکل 3:file.kt

>
شکل4: کنسول Intelij Idea

>
ادامه شکل4:کنسول Intelij Idea

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""