<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های رسول مدنی</title>
        <link>https://virgool.io/feed/@rasoul_madani</link>
        <description>برنامه نویس جاوا</description>
        <language>fa</language>
        <pubDate>2026-06-16 10:13:27</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>رسول مدنی</title>
            <link>https://virgool.io/@rasoul_madani</link>
        </image>

                    <item>
                <title>چرا  @MapsId در رابطه  یک به یک در اسپرینگ بوت جاوا بازدهی بهتری برای  پایگاه داده  دارد ؟</title>
                <link>https://virgool.io/@rasoul_madani/%DA%86%D8%B1%D8%A7-%D8%AF%D8%B1-%D8%B1%D8%A7%D8%A8%D8%B7%D9%87-%DB%8C%DA%A9-%D8%A8%D9%87-%DB%8C%DA%A9-%D8%AF%D8%B1-%D8%A7%D8%B3%D9%BE%D8%B1%DB%8C%D9%86%DA%AF-%D8%A8%D9%88%D8%AA-%D8%AC%D8%A7%D9%88%D8%A7-%D8%A8%D9%87%D8%AA%D8%B1-%D8%A7%D8%B3%D8%AA-%D8%A7%D8%B2-mapsid-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%DA%A9%D9%86%DB%8C%D9%85-quh98k6f3yuc</link>
                <description>بسم الله الرحمن الرحیم برای تعیین یک رابطه یک به یک باید یک ستون ارتباطی بین دو جدول داشته باشیم که به آن کلید خارجی می گویند.یعنی در جدول مقصد یک کلید اصلی و یک کلید خارجی برای ارتباط با جدول مبدا خواهیم داشت .  چون رابطه یک به یک هست یعنی هر سطر از جدول مبدا فقط با یک سطر از جدول مقصد ارتباط دارد و نظیر به نظیر هستند . اگر بتوانیم کلید خارجی را در جدول مقصد حذف کنیم و فقط با همین کلید های اصلی ارتباط بین دو جدول را برقرار کنیم فواید خیلی زیادی حاصل خواهد شد .در شکل زیر تفاوت دو روش را مشاهده می کنید :‌در اینجا جدول پست دیتیلز با جدول پست به واسطه کلید خارجیپست آیدی ارتباط یک به یک برقرار کرده است .رابطه یک به یکولی در شکل زیر جدول پست دیتیلز فقط یک کلید دارد که از آن , هم به عنوان کلید اصلی و هم به عنوان کلید خارجی برای ارتباط با جدول پست استفاده شده است .رابطه یک به یک تک سطریروش استفاده از فقط یک کلید هم به عنوان اصلی و هم برای ارتباط خیلی فواید زیادی دارد :۱ - کاهش پیچیدگی و افزایش سادگی مدل داده:در این روش شما می‌توانید رابطه بین موجودیت‌ها را به طور مستقیم و با استفاده از کلید اصلی (primary key) برقرار کنید. این روش باعث کاهش پیچیدگی در مدل داده می‌شود زیرا دیگر نیازی به تعریف کلید خارجی (foreign key) اضافی و نگهداری آن در جدول موجودیت فرزند نیست. به عبارت دیگر، کلید اصلی موجودیت فرزند به کلید اصلی موجودیت والد نگاشت می‌شود و این موضوع باعث می‌شود که مدل داده ساده‌تر و تمیزتری داشته باشید.۲ - حفظ یکپارچگی داده‌ها:باعث می‌شود که یکپارچگی داده‌ها (data integrity) بهتر حفظ شود. به عنوان مثال، در یک رابطه one-to-one، اگر کلید اصلی موجودیت والد تغییر کند، به طور خودکار کلید اصلی موجودیت فرزند نیز تغییر می‌کند. این رفتار باعث می‌شود که رابطه بین دو موجودیت همیشه معتبر باقی بماند و هیچگاه داده‌های یتیم (orphan data) ایجاد نشود.۳ -  کاهش افزونگی داده‌ها:نیازی به نگهداری یک ستون جداگانه برای کلید خارجی در موجودیت فرزند ندارید. یعنی اطلاعات اضافه و بی ارزش از بین می رود .۴ - بهبود عملکرد و کارایی:نگاشت کلید اصلی به کلید خارجی می‌تواند به بهبود عملکرد و کارایی برنامه کمک کند. زیرا در این روش، عملیات ‌ CRUD ( ایجاد، خواندن، به‌روزرسانی و حذف) به صورت بهینه‌تری انجام می‌شود. به طور خاص، به دلیل کاهش نیاز به جداول واسط و کاهش تعداد جستجوها و به‌روزرسانی‌ها در پایگاه‌داده، عملکرد کلی برنامه بهبود می‌یابد.این روش در اسپرینگ بوت جاوا با @MapsId  یپاده سازی می شود.در جدول مقصد  , ستون ارتباطی را با این انوتیشن مشخص می کنیم .پیاده سازی این روش برای کلاس جدول مبدا :@Entity(name = &#039;&#039; Post &#039;&#039; )
@Table(name = &#039;&#039; post &#039;&#039; )
public class Post {
    @Id
    @GeneratedValue
     private Long id;

    @OneToOne(mappedBy = &#039;&#039; post &#039;&#039; )
     private PostDetails details;
}پیاده سازی این روش برای کلاس جدول مقصد :@Entity(name = &#039;&#039;PostDetails&#039;&#039;)
@Table(name = &#039;&#039;post_details&#039;&#039;)
public class PostDetails {
    @Id
    private Long id;

    @OneToOne
    @MapsId
    private Post post;
}باید دقت کنید که در کلاس جدول مقصد برای مشخص کردن شناسه نباید از@GeneratedValueاستفاده کنیم چون قرار هست کلید اصلی به وسیله جدول مبدا  و ارتباط اش مشخص شود یعنی شناسه را در جدول مقصد به صورت زیر تعریف کنید :‌@Id
private Long id;ستون ارتباطی در جدول مقصد را به این صورت بنویسید :@OneToOne
@MapsId
private Post post;ستون ارتباطی در جدول مبدا را به این صورت بنویسید :@OneToOne(mappedBy = &#039;&#039;post&#039;&#039;)
private PostDetails details;در روش قدیمی جدول ها به این صورت تعریف می شدند :‌جدول مبدا :@Entity(name = &#039;&#039;Post&#039;&#039;)
@Table(name = &#039;&#039;post&#039;&#039;)
public class Post {

    @Id
    @GeneratedValue
    private Long id;

    @OneToOne(mappedBy = &#039;&#039;post&#039;&#039;)
    private PostDetails details;
}جدول مقصد :@Entity(name = &#039;&#039;PostDetails&#039;&#039;)
@Table(name = &#039;&#039;post_details&#039;&#039;)
public class PostDetails {

    @Id
    @GeneratedValue
    private Long id;

    @OneToOne
    @JoinColumn(name = &#039;&#039;post_id&#039;&#039;)
    private Post post;
}همان طور که می بیند در روش قدیمی و بدون @MapsId  هر جدول یک شناسه دارد  چون در هر دو@GeneratedValueبرای شناسه تعریف شده است و جدول مقصد علاوه بر کلید اصلی یک کلید خارجی هم خواهد داشت .خروجی روش قدیمی :</description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Mon, 26 Aug 2024 10:34:35 +0330</pubDate>
            </item>
                    <item>
                <title>چرا ظرفیت اولیه در HashMap  و ArrayList جاوا را باید حدود یک سوم بیشتر ازمقدار مورد نیاز در نظر بگیریم ؟</title>
                <link>https://virgool.io/@rasoul_madani/%DA%86%D8%B1%D8%A7-%D8%B8%D8%B1%D9%81%DB%8C%D8%AA-%D8%A7%D9%88%D9%84%DB%8C%D9%87-%D8%B1%D8%A7-%D8%AF%D8%B1-hashmap-%D9%88-arraylist-%D8%AC%D8%A7%D9%88%D8%A7-%D8%B1%D8%A7-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%AD%D8%AF%D9%88%D8%AF-%DB%8C%DA%A9-%D8%B3%D9%88%D9%85-%D8%A8%DB%8C%D8%B4%D8%AA%D8%B1-%D8%A7%D8%B2%D9%85%D9%82%D8%AF%D8%A7%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-%D9%86%DB%8C%D8%A7%D8%B2-%D8%AF%D8%B1-%D9%86%D8%B8%D8%B1-%D8%A8%DA%AF%DB%8C%D8%B1%DB%8C%D9%85-o6z2s4tc3vpa</link>
                <description>بسم الله الرحمن الرحیمتعیین  ظرفیت اولیه مناسب برای ساختارهای داده‌ای مانند HashMap  و ArrayList می‌تواند تأثیر قابل توجهی بر عملکرد برنامه داشته باشد.بیایید یکی یکی این ساختارهای داده ای پرکاربرد را در این مورد بررسی کنیم :ظرفیت اولیه  در  ArrayList   ArrayList  یکی از پرکاربردترین کلاس‌ها در جاوا برای ذخیره و مدیریت لیست‌های داینامیک است.در زمان ایجاد یک  ArrayList می‌توانید ظرفیت اولیه آن را مشخص کنید.ظرفیت اولیه، اندازه آرایه‌ای است که برای ذخیره اعضای آرایه استفاده می‌شود.اگر تعداد عناصر اضافه‌شده به ArrayList از ظرفیت فعلی بیشتر شود،  اعضای آرایه به صورت خودکار  در یک آرایه جدید با ظرفیت بیشتر کپی می شود  که این عملیات می‌تواند از نظر زمانی هزینه‌بر باشد. چون تمام اعضای آرایه فعلی در یک آرایه جدید با ظرفیت بیشتر باید کپی می شود .دقت کنید که اگر مقداری وارد نکنید، خود جاوا بصورت پیش فرض ظرفیت اولیه را عدد ۱۰ در نظر می گیرد.فاکتور Load در افزایش ظرفیت  یکی از پارامترهای مهم در  افزایش اندازه ArrayListفاکتور بارگذاریLoad Factor )   (است که تعیین می‌کند چه زمانی  ArrayList نیاز به افزایش اندازه دارد. این عدد به صورت پیش فرض ۰.۷۵ است .یعنی به صورت پیش فرض حدودا زمانی که دو سوم از ArrayList پر شد تغییر اندازه صورت می گیرد . پس باید اندازه را طوری در نظر بگیرید که یک سوم بیشتر از اندازه ای که می خواهید باشد . تا تمام اعضا را پوشش دهد و زودتر از موعد تغییر اندازه صورت نگیرد.افزایش اندازه زمانی رخ می‌دهد که تعداد ورودی‌ها از حاصل‌ضرب ظرفیت فعلی در فاکتور بارگذاری فراتر رود. یعنی تقریبا دو سوم پر شود.برای محاسبه ظرفیت اولیه بهینه ArrayList  می‌توانید از فرمول زیر استفاده کنید   : C=[n / Load factor]  که در آن: n   تعداد اعضایی که می خواهید در اری لیست ذخیره کنید Load factor  فاکتور بارگذاری، که به طور پیش‌فرض 0.75 است.مثلا اگر انتظار دارید که در ArrayList  خود 100 ورودی ذخیره کنید، با استفاده از فاکتور بارگذاری پیش‌فرض 0.75، ظرفیت اولیه بهینه 134 خواهد بود:C = 100/0.75 = 134حالا چرا ظرفیت اولیه در ArrayList مهم است؟ اگر تعداد عناصر مورد انتظار را بدانید، تعیین ظرفیت اولیه با این همین تعداد می‌تواند از افزایش‌های پیاپی اندازه آرایه با ایجاد آرایه های جدید با ظرفیت بیشتر , جلوگیری کرده و در نتیجه عملکرد بهتری فراهم کند.به عنوان مثال، اگر بدانید که لیستی با ۵۰ عنصر دارید، می‌توانید ظرفیت اولیه ArrayList را روی ۶۷  تنظیم کنید50 / 0.75 = 67 تا از افزایش‌های غیر ضروری جلوگیری شود. این کار به ویژه در پروژه‌هایی با داده‌های بزرگ می‌تواند تاثیر بسزایی در بازدهی برنامه شما داشته باشد.دقت کنید ! مثلا کپی کردن یک میلیون عضو آرایه در یک آرایه جدید برای افزایش ظرفیت آرایه , خیلی زمان بر خواهد بود .arrayList arrayListظرفیت اولیه  در  HashMap  HashMap نیز یک ساختار داده کلید-مقدار (Key-Value) است که برای ذخیره داده‌ها به صورت جفت‌های کلید و مقدار استفاده می‌شود. مشابه  ArrayList، در زمان ایجاد یک  HashMap  می‌توانید ظرفیت اولیه آن را تعیین کنید .فاکتور Load در HashMap یکی از پارامترهای مهم در  HashMapهم فاکتور بارگذاری ( Load Factor ) است که تعیین می‌کند چه زمانی  HashMap نیاز به افزایش اندازه دارد.افزایش اندازه زمانی رخ می‌دهد که تعداد ورودی‌ها از حاصل‌ضرب ظرفیت فعلی در فاکتور بارگذاری فراتر رود.یعنی مثل ArrayList  به صورت پیش فرض وقتی حدودا دو سوم از HashMap پر شد تغییر اندازه صورت می گیرد . پس باید اندازه را طوری در نظیر بگیرید که یک سوم بیشتر از اندازه ای که می خواهید باشد . تا تمام اعضا را پوشش دهد و زودتر از موعد تغییر اندازه صورت نگیرد.افزایش اندازه یک عملیات پرهزینه است و انتخاب ظرفیت اولیه بهینه می‌تواند از وقوع آن جلوگیری کند.برای محاسبه ظرفیت اولیه بهینه در HashMap  هم از همان  فرمول استفاده کنید   : C=[n / Load factor]  که در آن: n   تعداد ورودی‌های مورد انتظار Load factor  فاکتور بارگذاری، که به طور پیش‌فرض 0.75 است.مثلا اگر انتظار دارید که در HashMap خود 100 ورودی ذخیره کنید، با استفاده از فاکتور بارگذاری پیش‌فرض 0.75، ظرفیت اولیه بهینه 134 خواهد بود:C = 100/0.75 = 134</description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Thu, 22 Aug 2024 16:08:34 +0330</pubDate>
            </item>
                    <item>
                <title>چگونه کوئری های  اس کیو ال ( sql ) را در اسپرینگ بوت جاوا  زیباتر و دقیق تر ببینیم ؟</title>
                <link>https://virgool.io/@rasoul_madani/%DA%86%DA%AF%D9%88%D9%86%D9%87-%DA%A9%D9%88%D8%A6%D8%B1%DB%8C-%D9%87%D8%A7%DB%8C-%D8%A7%D8%B3-%DA%A9%DB%8C%D9%88-%D8%A7%D9%84-sql-%D8%B1%D8%A7-%D8%AF%D8%B1-%D8%A7%D8%B3%D9%BE%D8%B1%DB%8C%D9%86%DA%AF-%D8%A8%D9%88%D8%AA-%D8%AC%D8%A7%D9%88%D8%A7-%D8%B2%DB%8C%D8%A8%D8%A7%D8%AA%D8%B1-%D9%88-%D8%AF%D9%82%DB%8C%D9%82-%D8%AA%D8%B1-%D8%A8%D8%A8%DB%8C%D9%86%DB%8C%D9%85-vd32saznrrqq</link>
                <description>datasource-proxyبسم الله الرحمن الرحیم اگر بخواهیم زمان اجرای کوئری ها و پارامترها و تعداد کوئری ها و ... را در کنسول هنگام اجرای اسپرینگ بوت داشته باشیم یک کتابخانه ای برای اینکار در میون maven وجود دارد به اسمdatasource-proxyاین کتابخانه اطلاعات خوبی از کوئری به ما می دهد یک نمونه از لاگ آن را در کنسول در صفحه بعد می توانید ببینید :2024-08-12 12:00:00.000 DEBUG 12345 --- [ main ] net.ttddyy.dsproxy.listener.SLF4JQueryLoggingListener:
Name:MyDS, Time:5ms, Success:True
Type:Prepared, Batch:False, QuerySize:1, BatchSize:0
Query:[&amp;quotSELECT * FROM users WHERE id = ?&amp;quot]
Params:[(1)]برای نصب و تنظیم این کتابخانه در اسپرینگ بوت به روش زیر عمل میکنیم :‌۱ – ابتدا این کتابخانه را به pom.xml اضافه کنید :‌&lt;dependency&gt;
    &lt;groupId&gt;net.ttddyy&lt;/groupId&gt;
    &lt;artifactId&gt;datasource-proxy&lt;/artifactId&gt;
    &lt;version&gt;1.10&lt;/version&gt;
&lt;/dependency&gt;۲ – این چند خط را در application.properties  اضافه کنید :spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
# Set the logging level for datasource-proxy to DEBUG to see query logs logging.level.net.ttddyy.dsproxy.listener.SLF4JQueryLoggingListener=DEBUG 
 
 logging.level.net.ttddyy.dsproxy.listener=DEBUG 
 
 # Set the logging level for the package where your DataSourceConfig class is located logging.level.your.package.DataSourceConfig=DEBUG۳ – یک کلاس به نام  DataSourceConfig ایجاد کنید و این کدها را درون آن قرار دهید :‌import net.ttddyy.dsproxy.support.ProxyDataSourceBuilder;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource(DataSourceProperties dataSourceProperties) {
    DataSource originalDataSource =  
                 dataSourceProperties.initializeDataSourceBuilder().build();
        return ProxyDataSourceBuilder
                     .create(originalDataSource) .name(&amp;quotMyDS&amp;quot)
                     .countQuery()
                     .logQueryBySlf4j() // Log queries using SLF4J (visible in console)
                     .build();
    }
}برنامه را اجرا کنید و از لاگ های زیبای این کتابخانه لذت ببرید .</description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Wed, 14 Aug 2024 09:18:52 +0330</pubDate>
            </item>
                    <item>
                <title>چرا اشیای رشته‌ای  (string objects) در جاوا تغییر‌ناپذیر (immutable) هستند؟</title>
                <link>https://virgool.io/@rasoul_madani/%DA%86%D8%B1%D8%A7-%D8%A7%D8%B4%DB%8C%D8%A7%DB%8C-%D8%B1%D8%B4%D8%AA%D9%87-%D8%A7%DB%8C-string-objects-%D8%AF%D8%B1-%D8%AC%D8%A7%D9%88%D8%A7-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D9%86%D8%A7%D9%BE%D8%B0%DB%8C%D8%B1-immutable-%D9%87%D8%B3%D8%AA%D9%86%D8%AF-umkeokd49t8g</link>
                <description>بسم الله الرحمن الرحیمچرا اشیای رشته‌ای (string objects)  در جاوا تغییر‌ناپذیر (immutable) هستند؟به دلیل اینکه جاوا از مفهوم رشته‌های لیترال(string literal) استفاده می‌کند.اگر بخواهیم لیترال را دقیق تر تعریف کنیم اینگونه آن را تعریف خواهیم کرد : هر مقدار ثابتی را که بتوان در متغیر ذخیره کرد لیترال می گویند لیترال ها بدون هیچ گونه محاسبه ای مستقیماً در کد نشان داده می شوند . به مثال زیر توجه کنید :/ Here 100 is a constant/literal.int x = 100;String s =  &quot;Salam&quot;در این مثال 100 یک لیترال عددی است.و رشته ی “salam” هم یک شی لیترال رشته ای هست .اشیای رشته ای لیترال در جاوا در استخر استرینگ( String pool ) ذخیره می شوند .اگر بخواهیم یک رشته لیترال جدید ایجاد کنیم جی وی ام   string pool  را بررسی می کند اگر از آن رشته قبلا وجود داشته باشد نشانی حافظه آن را برمی گرداند و اگر وجود نداشته باشد یکی می سازد و نشانی آن را برمی گرداند .String literalفرض کنید ۵ متغیر رشته ای لیترال داریم که همگی یک مقدار &quot;Salam&quot;دارند در نتیجه همگی به یک شیء رشته ای لیترال به نام &quot;Salam&quot;در  string pool اشاره می‌کنند.اگر یک متغیر مقدار شیء را تغییر دهد، این تغییر بر تمامی متغیرهای مرجع تاثیر می‌گذارد. برای جلوگیری از این کار ، اشیای رشته‌ای در جاوا تغییر‌ناپذیر هستند.پستی دیگر از این نویسنده :‌ https://vrgl.ir/JXYId </description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Wed, 24 Jul 2024 12:05:33 +0330</pubDate>
            </item>
                    <item>
                <title>چرا ternary operator  یا همان عملگرهای سه گانه در جاوا توابع void  را قبول نمی کنند ؟</title>
                <link>https://virgool.io/@rasoul_madani/%DA%86%D8%B1%D8%A7-ternary-operator-%DB%8C%D8%A7-%D9%87%D9%85%D8%A7%D9%86-%D8%B9%D9%85%D9%84%DA%AF%D8%B1%D9%87%D8%A7%DB%8C-%D8%B3%D9%87-%DA%AF%D8%A7%D9%86%D9%87-%D8%AF%D8%B1-%D8%AC%D8%A7%D9%88%D8%A7-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-void-%D8%B1%D8%A7-%D9%82%D8%A8%D9%88%D9%84-%D9%86%D9%85%DB%8C-%DA%A9%D9%86%D9%86%D8%AF-njx6wnqlmxs2</link>
                <description>بسم الله الرحمن الرحیمچرا ternary operator یا همان عملگرهای سه گانه در جاوا توابع void  را قبول نمی کنند ؟به دلیل اینکه عملگرهای سه گانه در جاوا فقط عبارت (Expression) قبول می کنند و نه دستور (Statement)در جاوا، &quot;دستور&quot; و &quot;عبارت&quot; دو مفهوم متفاوت دارند:عبارت (Expression):عبارتی است که مقداری را تولید می‌کند و می‌تواند شامل متغیرها، عملگرها و فراخوانی توابع باشد.به عنوان مثال a + b  یا  Math.sqrt(x) نمونه‌هایی از عبارات هستند. این عبارات به عنوان یک مقدار عددی یا Boolean برمی‌گردانند.دستور (Statement):دستوری است که یک عمل خاص را انجام می‌دهد و نمی‌تواند به تنهایی مقداری را برگرداند.به عنوان مثال  int a = 5; یا System.out.println(a); نمونه‌هایی از دستورات هستند. این دستورات عملیات خاصی را اجرا می‌کنند مانند تعریف متغیر یا چاپ خروجی.به طور خلاصه، عبارات مقداری را تولید می‌کنند و دستورات عمل خاصی را انجام می‌دهند.ternary operator پستی دیگر از این نویسنده : https://vrgl.ir/JXYId </description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Tue, 23 Jul 2024 11:52:34 +0330</pubDate>
            </item>
                    <item>
                <title>تفاوت دستور ( Statement ) و عبارت ( Expression ) در جاوا چیست ؟</title>
                <link>https://virgool.io/@rasoul_madani/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1-statement-%D9%88-%D8%B9%D8%A8%D8%A7%D8%B1%D8%AA-expression-%D8%AF%D8%B1-%D8%AC%D8%A7%D9%88%D8%A7-%DA%86%DB%8C%D8%B3%D8%AA-bywq0wcniz7l</link>
                <description>تفاوت دستور ( Statement ) و عبارت ( Expression ) در جاوا چیست ؟بسم الله الرحمن الرحیمدر جاوا، &quot;دستور&quot; و &quot;عبارت&quot; دو مفهوم متفاوت دارند:عبارت (Expression):عبارتی است که مقداری را تولید می‌کند و می‌تواند شامل متغیرها، عملگرها و فراخوانی توابع باشد.به عنوان مثال: a + b  یا  Math.sqrt(x) نمونه‌هایی از عبارات هستند. این عبارات به عنوان یک مقدار عددی یا Boolean برمی‌گردند.دستور (Statement):دستوری است که یک عمل خاص را انجام می‌دهد و نمی‌تواند به تنهایی مقداری را برگرداند.به عنوان مثال  int a = 5; یاSystem.out.println(a); نمونه‌هایی از دستورات هستند. این دستورات عملیات خاصی را اجرا می‌کنند، مانند تعریف متغیر یا چاپ خروجی.به طور خلاصه، عبارات مقداری را تولید می‌کنند و دستورات عمل خاصی را انجام می‌دهند.</description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Tue, 23 Jul 2024 11:26:49 +0330</pubDate>
            </item>
                    <item>
                <title>رفع مشکل فراموشی در برنامه نویسی با  انکی وب ankiweb</title>
                <link>https://virgool.io/@rasoul_madani/%D8%B1%D9%81%D8%B9-%D9%85%D8%B4%DA%A9%D9%84-%D9%81%D8%B1%D8%A7%D9%85%D9%88%D8%B4%DB%8C-%D8%AF%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D8%A7-%D8%A7%D9%86%DA%A9%DB%8C-%D9%88%D8%A8-ankiweb-qpueka3wyyfy</link>
                <description>انکی وب ankiwebبسم الله الرحمن الرحیم با توجه به این جمله از یکی از بزرگان که هر چیزی آفتی دارد یکی از مهمترین آفت های برنامه نویسی وجود مباحث زیاد و فرار بودن آنهاست ولی خب این آفت  برای افراد مختلف  تاثیر متفاوتی دارد کسانی رو دیدیم که حافظ بسیار قوی ای دارند و بسیار سریع مطالب را حفظ کرده و دیر فراموش می کنند ولی خب چند درصد جامعه ی برنامه نویسان این گونه افراد هستند ؟ طبیعی است که خیلی از برنامه نویسان هم حافظه خوبی ندارند و خب این مشکلاتی را ایجاد می کند مثلا در مصاحبه ,  مطالبی را که قبلا کار کرده بودند به یاد نمی آوردند و از یک شرکت خوب رد می شوند یا هزاران مشکل دیگر .....برای رفع این مشکل چکار باید بکنیم ؟‌معلم ها و کسانی که تدریس می کنند چرا کمتر فراموش می کنند واضح است  تکراردر سخنان قدیمی ها هم این مهم منتشر یافته است که درس یک مرتبه و تکرار هزار مرتبه الدرس حرف و التکرار الف ولی خب همه افراد استعداد تدریس رو ندارند  و هر کسی  فرصت و حوصله تدریس و پیدا کردن یک نفر و تدریس کردن به او را پیدا نمی کند تا مطالب به کررات برایش مرور شود  . پس  برای این گونه افراد چه باید کرد ؟‌یکی از راه حل های خیلی خوب یک نرم افزار خیلی قدیمی به نام انکی وب ankiweb هست که کارش هم خیلی ساده استشما یک مطلب را به صورت کارتی که عنوان در یک سمت و توضیح در سمت دیگر هست می نویسید و نرم افزار این کارت های پشت و رو را در فواصل زمانی متفاوتی به شما نشان می دهد و می توانید مرور کنید مرورش هم به این صورت هست که اول روی کارت را نشان می دهد و شما عنوان و یا سوال را می بینید اگر  آن مطلب به خاطرتان آمد گزینه ساده را انتخاب می کنید و اگر به خاطر نیاوردید گزینه سخت را انتخاب می کنید و بعد می توانید پشت کارت را ببینید و مطلب را مرور کنید گزینه سخت باعث می شود در مرورهای بعدی هم این کارت به تکرار های زیاد به شما نشان داده شود انواع فواید  نرم افزار  انکی وب ankiweb در برنامه نویسی :‌۱ - تسلط بر کلید واژه ها در مصاحبه ها بحث کلید واژه ها خیلی مهم است مثلا می پرسند واژه اینترفیس چیست ؟‌ دادن پاسخ جامع به یک واژه و تفسیر و کنکاش واژه  نشان از تبحر و کار کردن شما در اون مبحث دارد    شما می توانید یک کارت برای واژه اینترفیس درست کنید و مطالب اینترفیس را در پشت کارت بنویسید این طوری هرجا مطلبی دیدید می توانید در همین کارت و یا کارت های دیگر قرار دهید و به کررات مرور کنید و وقتی مصاحبه کننده پرسید اینترفیس چیست ؟‌ به راحتی تمام مطالب را به خاطر بیاورید و یک به یک به او توضیح دهید .۲ - تحقیق در آینده خیلی از اوقات هست که  یک کلید واژه ای از برنامه نویسی را در جایی می بینید ولی در اون لحظه فرصت و یا حوصله ندارید در مورد آن تحقیق کنید کافیست آن کلیدواژه را در یک کارت در نرم افزار بنویسید و در قسمت توضیحات عنوان کنید که تحقیق شود بعدا که در حال مرور کارت ها هستید وقتی به این کارت می رسید در مورد آن تحقیق می کنید و قسمت توضیحات را پر می کنید . این کار خیلی به گسترش دانش شما و عمیق شدن در یک زبان برنامه نویسی کمک می کند. انکی وب ankiweb۳ - دسته بندی مطالب و کارت ها یکی از امکانات این نرم افزار امکان دسته بندی کارت ها هست  اول باید یک دسته ایجاد کنید و بعد داخل اون دسته کارت ها را قرار دهید مثلا می توانید کارت های مربوط به اینترفیس را داخل دسته اینترفیس ذخیره کنید یا مثلا در جاوا بحث آپشنال را در دسته آپشنال قرار دهید .۴ - زمان بندی مرور یکی دیگر از امکانات نرم افزار امکان زمان بندی هست نرم افزار براساس نمودار فراموشی مرور کارت ها را زمان بندی می کند و همچنین کارت هایی که سخت هست و زود فراموش می کنید را در فواصل زمانی کوتاه تر برای مرور قرار می دهد تا سریع حفظ کنید . ۵ - ذخیره در فضای ابرییکی از امکانات خوب این هست که این نرم افزار یک فضای ابری دارد و رایگان هم هست با یک ایمیل می توانید یک حساب کاربری باز کنید و تمام کارت ها را در فضای ابری ذخیره کنید این گونه تمام کارت های شما برای همیشه در دسترس خواهند بود .۶ - اضافه کردن  عکس و صوت و فیلم به توضیحاتمی توانید به توضیحات خود عکس و صوت اضافه کنید تا در مرور بتوانید راحت تر مرور کنید مثلا دارید یک فیلم آموزشی می بینید می توانید از صفحه عکس گرفته و به توضیحات اضافه کنید تا کدهای مدرس رو هم داشته باشید  ۷ - وجود کارت های آماده در فضای اینترنت خیلی ها کارت هایی که با این نرم افزار درست کرده اند را به اشتراک می گذارند می توانید آن ها را به کارتهای خود در نرم افزار اضافه کنید و مرور کنید و یا به این کارت های آماده چیزهایی را اضافه کنید و برای خود شخصی سازی کنید . اگر براتون مفید  بود خدای برنامه نویس ذهن انسان رو شکر کنید . </description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Mon, 08 Jul 2024 10:44:17 +0330</pubDate>
            </item>
                    <item>
                <title>تمرین جاوا – فروشگاه محصولات</title>
                <link>https://virgool.io/@rasoul_madani/%D8%AA%D9%85%D8%B1%DB%8C%D9%86-%D8%AC%D8%A7%D9%88%D8%A7-%D9%81%D8%B1%D9%88%D8%B4%DA%AF%D8%A7%D9%87-%D9%85%D8%AD%D8%B5%D9%88%D9%84%D8%A7%D8%AA-f0eaiqu3x9zi</link>
                <description>تمرین جاوایک فروشگاه آنلاین دو نوع محصول به فروش میرساند :دسته بندی نوع ۱ : لوازم الکترونیکی از جمله رادیو و تلویزیون و…دسته بندی نوع ۲ : کفش از جمله ورزشی و رسمی و …در این فروشگاه آنلاین باید عملیاتهای زیر موجود باشد :افزودن محصول به سبد خرید با توجه به موجودی فروشگاه.حذف محصول از سبد خریدچاپ لیست کلیه محصولات اضافه شده به سبد خرید به همراه تعداد آنها.چاپ مجموع قیمتهای آیتم های سبد خرید.نقطه ی ورودی برنامه با ثبت نام کاربر آغاز میشود و پس از آن کاربر به سامانه لاگین کرده و بعد منویی به کاربر نمایش داده شود که کاربر توسط آن بتواند لیست آیتم ها را مشاهده و آیتم مورد نظر را به سبد خرید اضافه کند.نکات :1. محصولات را به صورت enum تعریف کنید (برای سادگی کار)حداقل ۲ محصول در هر دسته بندی .۲ . تمامی exception ها هندل شوند.۳ . وقوع اکسپشن و کرش کردن برنامه نمره ی منفی دارد.۴ . استفاده بجا از generic و interface الزامیست.۵ . پیاده سازی ApplicationContext الزامیست.۶ . استفاده از Lombok &amp; List مجاز می باشد. :)کدهای حل این تمرین در گیتهاب :  https://github.com/RasoulMadani/product-strore-exercise-whit-java-oop </description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Sat, 15 Jun 2024 09:14:45 +0330</pubDate>
            </item>
                    <item>
                <title>تمرین جاوا – سیستم مدیریت حساب بانکی و انتقال وجه</title>
                <link>https://virgool.io/@rasoul_madani/%D8%AA%D9%85%D8%B1%DB%8C%D9%86-%D8%AC%D8%A7%D9%88%D8%A7-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D8%AD%D8%B3%D8%A7%D8%A8-%D8%A8%D8%A7%D9%86%DA%A9%DB%8C-%D9%88-%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D9%88%D8%AC%D9%87-gb4tineuo5z2</link>
                <description>تمرین جاوا – سیستم مدیریت حساب بانکی و انتقال وجهرین جاوا سیستم تمرین جاوا – سیستم مدیریت حساب بانکی و انتقال وجهبرنامه ای جهت مدیریت حساب های بانکی و انجام عملیات های بانکی پیاده سازی کنید که سرویس ها و موارد خواسته شده را در اختیار کاربر قرار دهد .در ابتدا کاربر باید ثبت نام کند .برای ثبت نام به اطلاعا تی مانند نام کاربری ، رمز عبور نیاز دارد ، پس از ثبت نام ، کاربر جهت استفاده از سرویس های برنامه باید بر اساس نام کاربری و رمز عبور لاگین کند .( در این برنامه جهت تغییر اطلاعات هویتی مربوط به کاربر هیچ سرویسی نوشته نشود )ظاهر برنامه:منوی اصلی باید شامل موارد ثبت نام ، ورود و خروج باشد ، منوی ورود باید شامل موارد عملیات کارت ، عملیات مالی و خروج باشد و هر یک از منوهای عملیات کارت و عملیات مالی در کنار موارد خواسته شده در سوال باید قابلیت برگشت به قبل را نیز داشته باشد .بعد از لاگین ، کاربر میتواند بر اساس منوی نمایش داده شده سرویس مدنظر خود را انتخاب کند .این منو شامل موارد زیر است :۱ - عملیات های کارت که شامل این زیر منو ها میباشد :ـــ ثبت کارتـــ حذف کارتـــ نمایش کارت بانکی بر اساس نام کارتـــ نمایش کارت های بانکی متعلق به یک بانک خاص بر أساس   نام بانکـــ نمایش تمامی کارت هاـــ نمایش تمام تراکنش ها بر اساس فیلتر خاص( موارد  فیلتر :نوع  انتقال ، تاریخ تراکنش به صورت بازه ای و روزانه ,بر اساس مبلغ یعنی تراکنش های بزرگتر از مبلغوارد شده )ـــ نمایش تمام تراکنش های کاربر۲ - عملیات های مالی که شامل این زیر منو ها میباشد :ـــ انتقال وجه عادی ( کارت به کارت )ـــ انتقال وجه پایا انفرادی ( شخصی )ـــ انتقال وجه پایا دسته ایـــ انتقال وجه ساتناکارمزد انتقال :انتقال وجه عادی زیر 15میلیون ، انتقال وجه پایا بین 15 تا 50 میلیون و انتقال وجه ساتنا بیشتر از 50میلیون تا سقف 200میلیون میباشدانتقال وجه عادی اگر درون شبکه ای باشد بدون کارمزد ، اگر نباشد تا سقف 10میلیون 500 تومان و در غیر این صورت به ازای هر یک میلیون مبلغ مازاد 100تومان به مبلغ 500 تومان اضافه میشودانتقال وجه پایا انفرادی 0.01 مبلغ تراکنش با کف 240 تومان تا سقف 3000تومانو انتقال وجه دسته ای تا 10عدد برابر با 1200 تومان و در صورت بیشتر بودن به ازای هر عدد 120 تومان اضافه میشودو کارمزد انتقال وجه ساتنا 0.02 مبلغ کل تراکنش تا سقف 25000 توماننکات :به طور کلی تشخیص موجودیت ها و روابط بین آنها و فیلد های مربوطه بر عهده شما میباشد .بدیهی است این سوال باید حداقل دارای موجودیت های : کاربر ، حساب بانکی ، کارت اعتباری ، بانک و تراکنش باشد .برای نوع تراکنش ها ( عملیات های مالی ) و وضعیت انجام آنها ( موفق ، ناموفق ) از enum استفاده کنید .در صورت ناکافی بودن موجودی حساب عملیات انتقال و برداشت باید به صورت ناموفق ثبت شود .برای حل سوال از لایه بندی  service ،repository  ، entity  استفاده کنید .از اینترفیس جهت تعریف متد های  repositor و  service  استفاده کنید .برنامه حتما باید دارای منو به عنوان رابط کاربری باشد که قابلیت برگشت به قبل را داشته باشد .جهت استفاده از متد های سرویس از  کلاس   ApplicatonContext  استفاده کنید و آن را بصورت Eager Singleton پیاده سازی کنید .کوئری ها مربوط به ساخت جداول را در یک فایل sqlبصورت جداگانه نوشته و اجراکنید.* پیشنهاد می شود بعد ورود کاربر  ,شناسه و نام کاربری آن را در صورت نیاز به نحوی نگهداری کنید *.بارم بندی سوال۱ - ایجاد پکیج های service ، repository ،entity ، enum و استفاده از اینترفیس ۱۰ نمره .۲ - نوشتن کوئری ساخت جداول ۵ نمره۳- پیاده سازی  ApplicationContext بر اساس خواسته سوال ۱۵ نمره۴ – درنظر گرفتن لایه منو و پیاده سازی درست آن ۱۰ نمره۵ - انتقال وجه عادی ۵ نمره۶ - انتقال وجه پایا ۵ نمره۷ - انتقال وجه ساتنا ۵ نمره۸ - انتقال وجه پایا دسته ای ۱۰ نمره۹ - برداشت از کارت ۳ نمره۱۰ - واریز به کارت ۳ نمره۱۱ - تست تراکنش ناموفق ۲ نمره۱۲ - ثبت کارت ۲ نمره۱۳ - تغییر اطلاعات کارت ۲ نمر۱۴ - حذف کارت ۲ نمره۱۵ - حذف تمامی کارت ها ۱ نمره۱۶ - نمایش کارت ۲ نمره۱۷ - نمایش کارت بانکی بر اساس نام کارت ۲ نمره۱۸ - نمایش کارت های بانکی متعلق به یک بانک خاص ۲ نمره۱۹ - نمایش تمامی کارت ها ۱ نمره۲۰ - نمایش تراکنش ها بر اساس نوع انتقال ۲ نمره۲۱ - نمایش تراکنش ها بر اساس یک روز خاص ۲ نمره۲۲ - نمایش تراکنش بر اساس یک بازه ۲ نمره۲۳ - نمایش تراکنش ها بر اساس مبلغ (بزرگتر از مبلغ وارد شده) ۲ نمره۲۴ - نمایش تمامی تراکنش ها ۱ نمره۲۵ - ثبت نام ۲.۵ نمره۲۶ - لاگین ۲.۵ نمرهکدهای حل این تمرین در گیتهاب : https://github.com/RasoulMadani/A-program-to-manage-bank-accounts </description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Sat, 08 Jun 2024 09:22:53 +0330</pubDate>
            </item>
                    <item>
                <title>تمرین جاوا – برنامه بانک نرم افزار دانشگاهی</title>
                <link>https://virgool.io/@rasoul_madani/%D8%AA%D9%85%D8%B1%DB%8C%D9%86-%D8%AC%D8%A7%D9%88%D8%A7-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%A8%D8%A7%D9%86%DA%A9-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%D8%AF%D8%A7%D9%86%D8%B4%DA%AF%D8%A7%D9%87%DB%8C-sj1bcfudyd43</link>
                <description> تمرین جاوا - برنامه بانک نرم افزار دانشگاهیتمرین جاوا – برنامه بانک نرم افزار دانشگاهیمی خواهیم برنامه بانک نرم افزار دانشگاهی را  پیاده سازی کنیم. بانک نرم افزار محلی است در دانشگاه که دانشجویان می توانند از آن نرم افزار قرض بگیرند. برای قرض گرفتن نرم افزار تا یک هفته، هزینه ای دریافت نمی شود، اما بعد از یک هفته به ازای هر روز تاخیر، جریمه ای مشخص دریافت می شود.هنگامی که یکی از اعضای بانک برای گرفتن یا برگرداندن CD یا  DVDبه بانک مراجعه می کند، مسئول بانک، نام عضو، نام نرم افزار و تاریخ را در یک لیست وارد می کند.امکانی را برای مسئول بانک نرم افزار فراهم کنید که از روی این لیست گزارش های زیر را بتواند بگیرد:   ۱ -  جریمه همه اعضا را محاسبه کنند.  ۲ -  فهرستی از نرم افزارهای امانت گرفته شده را به دست آورد.در برنامه خود، پنج کلاس به نام های Bank, Date, Person, Disc, Borrow تعریف کنید.کلاس   :Borrowبرای عملیات قرض گرفتن نرم افزار استفاده می شود.متدهای مورنیاز این کلاس:Borrow (string disc, Date date);Date getDate();bool isLate(Date deliveryDate);string getDiscName();کلاس :Personبرای نگهداری اطلاعات یک عضو استفاده می شود.متدهای موردنیاز این کلاس:Person (string name);string getName();int getLateDays();void borrow(Disc  disc, Date date);void deliver (Disc  disc, Date date);ورودی برنامه:ورودی لیستی است که توسط مسئول بانک نرم افزار نوشته می شود. در اولین خط، ابتدا n یعنی تعداد رخدادها (تحویل یا دریافت نرم افزار ) و سپس  t که برابر با میزان جریمه به ازای هر روز دیرکرد است وارد می شود.سپس در nخط بعدی، در هر خط یک رخداد توصیف می شود. در ابتدای توصیف هر رخداد سه عدد صحیح که نشان دهنده روز، ماه، و سال روی دادن آن رخداد هستند قرار می گیرد. فرض کنید این تاریخها مطابق تقویم شمسی هستند و مقادیر آنها صحیح است. همچنین فرض کنید که ماه اسفند همیشه 29 روز است و سال کبیسه نداریم.پس از تاریخ، نام عضو و بعد از آن نام نرم افزار داده می شود. فرض کنید که هر دو نام فقط از حروف الفبا تشکیل شده اند. همچنین فرض کنید که هیچ دو عضو و یا هیچ دو نرم افزاری نام یکسان ندارند (یعنی از هر نرم افزار فقط یک نسخه داریم ).دقت کنید که با در نظر گرفتن یک رخداد نمی توان تشخیص داد که آن رخداد تحویل نرم افزار است یا دریافت نرم افزار، اما با در نظر گرفتن اطلاعات خطوط قبلی، این کار امکان پذیر خواهد بود. می توانید فرض کنید که اطلاعات از لحاظ منطقی صحیح هستند، یعنیمثلا قبل از اینکه یک نرم افزار بازگردانده شود عضو دیگری آن را قرض نمی گیرد.خروجی برنامه:در خروجی ابتدا در یک خط عبارت “ : Fines” را چاپ کنید و در خطوط بعدی به ازای هر یک از اعضا مطابق خروجی نمونه، نام و میزان جریمه او را نشان دهید. پس از آن در یک خط دیگر عبارت ” :‌ Borrowed Discs”  را نمایش داده و در خطوط پس از آن فهرستی از نرم افزارهایی که هنوز بازگردانده نشده اند را بنویسید. ترتیب نمایش اعضا و نرم افزارها اهمیتی ندارد.تمرین جاواکدهای حل این تمرین در گیتهاب :‌ https://github.com/RasoulMadani/software-bank-excersize-with-java-oop-and-test-it </description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Tue, 28 May 2024 14:25:56 +0330</pubDate>
            </item>
                    <item>
                <title>تمرین اس کیو ال  ( sql )</title>
                <link>https://virgool.io/@rasoul_madani/%D8%AA%D9%85%D8%B1%DB%8C%D9%86-%D8%A7%D8%B3-%DA%A9%DB%8C%D9%88-%D8%A7%D9%84-sql-jeq7kwjcx6x1</link>
                <description>تمرین اس کیو البسم الله الرحمن الرحیم تمرین اس کیو ال ( sql )با توجه به مدل رابطه ای زیر، پرسوجوهای متناظر را در یک فایل  .sql بفرستید.branch(branch_name, branch_city, assets)customer(customer_name,custumer_street, customer_city)loan(loan_number, branch_name, amount)borrower(customer_name, loan_number)account(account_number,branch_name, balance)depositor(customer_name, account_number)۱ - همه مشتریانی را بیابید که حساب دارند و وامی نگرفته اند.۲ - نام تمام مشتریانی را بیابید که در یک خیابان و یک شهر زندگی می کنند.۳ - نام تمام مشتریانی را بیابید که در تمامی شعبه ها دقیقا یک وام گرفته اند.۴ - نام تمام مشتریانی را بیابید که که در بیش از یک شعبه حساب دارند.۵ - اطلاعات وام، شعبه و مشتری تمام کسانی که بیش از  100,000وام گرفته اند را بیابید. ۶ - اطلاعات تمام شعبه هایی را بیابید که به تمام مشتریان خود حداقل یک بار وام داده اند. ۷ - مجموع مقدار وام گرفته شده در هر شعبه را بر اساس نام شعبه و مجموع وام بیابید.کدهای حل این تمرین در گیتهاب :‌ https://github.com/RasoulMadani/sql-exercise </description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Fri, 24 May 2024 12:00:15 +0330</pubDate>
            </item>
                    <item>
                <title>تمرین جاوا - مرحوم استرینگ</title>
                <link>https://virgool.io/@rasoul_madani/%D8%AA%D9%85%D8%B1%DB%8C%D9%86-%D8%AC%D8%A7%D9%88%D8%A7-%D9%85%D8%B1%D8%AD%D9%88%D9%85-%D8%A7%D8%B3%D8%AA%D8%B1%DB%8C%D9%86%DA%AF-w04yf9kgikd9</link>
                <description>تمرین برنامه نویسی جاوا شی گراییبسم الله الرحمن الرحیمتمرین جاوا - مرحوم استرینگبا فرض اينکه نوع داده  String نابود شده است مي خواهيم با استفاده از آرايه، كلاس  Sequence را براي استفاده ساده تر از كاراكتر ها بنويسيم. اين كلاس داراي آرايه اي از كاراكتر ها به نام  valueمي باشد.همچنين كلاس  Sequenceبايد شامل رفتار هاي زير باشد:۱ - concat(Sequence sequence) :‌اين متد  sequenceرا به آرايه موجود در شي اضافه مي كند.۲ -  indexOf( char character ) :‌اين متد شماره ي اولين خانه آرايه، كه  characterدر آن قرار دارد را برمي گرداند .۳ - replace(Sequence oldChars, Sequence newChars) :‌رشته oldChars را گرفته و در صورت موجود بودن، رشته  newChars را به جاي آن مي گذارد .۴ - equals(Sequence otherSeq) :يك شي از جنس Sequence  گرفته و در صورت برابر بودن با شي موجود  true و در غيراين صورت  falseرا برمي گرداند . ۵ - نمونه اي از كد در متد main :‌char[] chars1 = {‘h’,’e’,’l’,’l’,’o’};char[] chars2 = {‘ ’,’w’,’o’,’r’,’l’,’d’};Sequence words1 = new Sequence();words1.setValue(chars1);Sequence words2 = new Sequence();words1.setValue(chars2);int indexOfE = words1.indexOf(&#x27;e&#x27;); //indexOfE = 1words1.concat(words2); // words1 = {&#x27;h&#x27; , &#x27;e&#x27;, &#x27;l&#x27;, &#x27;l&#x27;, &#x27;o&#x27;, &#x27; &#x27;, &#x27;w&#x27;, &#x27;o&#x27;, &#x27;r&#x27;, &#x27;l&#x27;, &#x27;d&#x27;}Sequence words3 = new Sequence();words3.setValue(chars2);System.out.println(words1.equals(word2)); // falseSystem.out.println(words2.equals(word3)); //trueتمرین شی گرایی جاواکدهای حل این تمرین در گیتهاب :‌ https://github.com/RasoulMadani/Java-Oop-Exercise---Deceased-String </description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Fri, 24 May 2024 11:43:42 +0330</pubDate>
            </item>
                    <item>
                <title>تمرین جاوا - آزمون تیر اندازی سربازان</title>
                <link>https://virgool.io/@rasoul_madani/%D8%AA%D9%85%D8%B1%DB%8C%D9%86-%D8%AC%D8%A7%D9%88%D8%A7-%D8%A2%D8%B2%D9%85%D9%88%D9%86-%D8%AA%DB%8C%D8%B1-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%D8%B3%D8%B1%D8%A8%D8%A7%D8%B2%D8%A7%D9%86-i9sqduvxqved</link>
                <description>تمرین شی گرایی جاوابسم الله الرحمن الرحیمتمرین جاوا - آزمون تیر اندازی سربازاندر يك پادگان  ١٥ سرباز با درجه و شماره هاي شناسايي مختلفي حضور دارند كه قرار است توسط افسر ميدانِ تير، از آنها آزمون تيراندازي گرفته شود. هر سرباز چهار گلوله دارد كه در هر شليك، امتيازي بين  ٠تا  ١٠خواهد گرفت و اگر مجموع اين امتيازها  ٢٨ يا بيشتر باشد نمره قبولي را كسب خواهد كرد و ارتقاء درجه خواهد يافت؛ در غير اين صورت توسط افسر ميدان تير، درجه ي آن سرباز، تنزل داده خواهد داشت. در پايان هر بار آزمون كليه ي سربازان، افسر ميدان تير، بايد گزارش دقيقي از نمرات اين آزمون را به فرمانده ارايه كند.اين گزارش بايد شامل مشخصات هر سرباز و امتيازش در شليك هر گلوله باشد. نحوه ارائه گزارش (يا همان چاپ خروجي) به شکل زير مي باشد.Shooting Test [number]====================Soldier ID : [id]Bullet 1 : [score 1]Bullet 2 : [score 2]Bullet 3 : [score 3]Bullet 4: [score 4]Final Score: [sum]Initial Rank: [rank]Final Rank: [changed rank]**********************Soldier ID : [id]. . .Shooting test [number] result: [ ]% of soldiers are Corporalsتمرین جاوا شی گراییدر صورتي كه پس از اجراي آزمون تيراندازي بيش از  ٦٠درصد سربازان درجهشان سرجوخه باشد، در آن صورت بايداين آزمون مجدد برگزار شود و تا زمان رسيدن به نتيجه مطلوب اين فرايند تکرار مي شود. نتيجه مطلوب حالتي است كه كمتر از  ٦٠درصد سربازان سرجوخه باشند و بقيه سربازان ستوان و يا گروهبان باشند.ضمن در نظر داشتن فضاي مسئله و مفاهيم شي گرايي كه تاكنون خوانده ايد، كليه موجوديتها، رفتارها،وضعيت يا ويژگيهاي مورد نياز را تشخيص داده و آنها را در قالب كلاس(ها)،متد(ها)،فيلد(ها) و اشياء لازم پياده سازي كنيد.جهات سادگي فرض كنيد كه درجات( )rankزير را داريم كه به صورت نزولي مرتب شده اند:ستوان Lieutenantگروهبان Sergeantسرجوخه Corporalبراي پياده سازي درجات در كدهاي خود ميتوانيد از اعداد متناظر هر درجه استفاده كنيد.نکات: در صورتي كه سرباز داراي بالاترين درجه باشد، در صورت موفقيت، همان درجه خود را حفظ خواهد كرد و در      صورتي كه پايين ترين درجه را داشته باشد در صورت عدم كسب امتياز لازم، در همان درجه باقي خواهد       ماند. درجات به دست آمده از هر آزمون به آزمون بعدي انتقال مييابد. شماره شناسايي هر سرباز عددي منحصر به فرد و فقط مخصوص همان سرباز است. براي شبيه سازي امتياز تيراندازي در شليك هر گلوله، ميتوانيد يك عدد تصادفي از نوع  int توليد كنيد.براي        اينکار ميتوانيد از كلاس  Random استفاده كنيد.کدهای این تمرین در گیتهاب :‌ https://github.com/RasoulMadani/Object-oriented-java-soldier-shooting </description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Fri, 24 May 2024 11:28:27 +0330</pubDate>
            </item>
                    <item>
                <title>تمرین جاوا - سیستم مدیریت ورزش</title>
                <link>https://virgool.io/@rasoul_madani/%D8%AA%D9%85%D8%B1%DB%8C%D9%86-%D8%AC%D8%A7%D9%88%D8%A7-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D9%88%D8%B1%D8%B2%D8%B4-mh8ihm0dnpfi</link>
                <description>بسم الله الرحمن الرحیم تمرین جاوا - سیستم مدیریت ورزشدر اين تمرين مي خواهيم ساختار كلاسهای نشان داده شده در زير را پياده سازی كنيم .جاوا شی گراییاگر اسامی در عکس ناخواناست در زیر می توانید ببینید .Playersport: String team: String position: Stringfirst: Stringlast: StringBaseballPlayeratBats: inthits: intbattingAverage (): doublePitcherinnings: doubleearnedRuns: intearnedRunAverage (): doubleSoccerPlayerminutes: intgoals: intgoalsPerGame (): doubleGoaliegoalsAllowed: intaverageGoalsAllowed: doubleعلاوه بر کلاسهای عنوان شده ، شما به یک کلاس main با متد main هم نیاز خواهید داشت که اطلاعات یک مجموعه بازیکن را از فایل ورودی players.txt  که به شما داده شده و با توجه به فایل فرمت (data format) می خواند . با توجه به هر خط خوانده شده از فایل ورودی باید از یکی از کلاسهای Pitcher،  BaseballPlayer SoccerPlayer یا Goaline یک شی بسازید . این اشیا را در یک آرایه از نوع Player نگهداری کنید.استفاده از کلمه کلیدی superدر سازنده کلاس هایی که پیاده سازی میکنید مشابه با کلاس های داده شده ، به صورت مناسب از کلمه super باید استفاه شود. بازنویسی متد toStringعلاوه بر متدهای نشان داده شده در ساختار کلاسها ،  همه کلاسها یک متد toString هم دارند که در هر یک از کلاسها برای چاپ مشخصات و ویژگی های بازیکنان استفاده می شود. این متد را برای هر کلاس به درستی بازنویسی کنید برای این منظور باید موارد زیر لحاظ شود.۱  - برای کلاس Goalie باید مقدار averageGoalsallowed و برای کلاس SoccerPlayer باید مقدار goalsperGame با استفاده از روابط زیر در متدهای مربوطه محاسبه شده و در toString بعد از فراخوانی مورد استفاده قرار بگیرند.goals per game = (goals/minutes) * 90.average goals allowed = (goalsAllowed/minutes) * 90۲. مقادیر خواسته شده در آیتم بالا باید به فرمت سه رقم اعشار برگردانده شوند. به این منظور، میخواهیم از متد format از کلاس String استفاده نماییم برای آشنایی با نحوه استفاده از این متد از جستجو در اینترنت استفاده کرده و همچنین میتوانید مشابه با متد toString در کلاسهایی که در اختیارتان قرار گرفته عمل کنید متد format برای تعیین فرمت داده استفاده شده و مشابه با printf که قبلا در مبانی برنامه نویسی با آن آشنا شدید کار میکند فقط به جای ارسال نتیجه به خروجی آن را به صورت یک رشته برمی گرداند.استفاده از اینترفیسفرض کنید دو اینترفیس به نامهای Defend و shoot داریم که هر یک فقط یک متد به ترتیب به نام هایcanDefend و canShoot را تعریف می کنند در پیاده سازی کلاس soccerPlayer اینترفیس Shoot و در کلاس BaseballPlayer اینترفیس Defend را پیاده سازی کنید پیاده سازی متدها فقط شامل مقداردهی به یک مقدار بولین به نام canDefend و canShoot خواهد بود که با هر بار فراخوانی با احتمال ۰٫۵ مقدار true و در غیر این صورت مقدار false خواهد داشت برای انجام این فرآیند از تولید عدد تصادفی در جاوا با توزیع یکنواخت استفاده کنید مقدار این بولین باید در متدهای toString این دو کلاس به عنوان بخشی از خروجی برگدانده شود.خروجیدر متد main از کلاس main باید با استفاده از چند ریختی و آرایه ای که از اشیای player دارید، متد toString هر شی را فراخوانی کرده و علاوه بر متد toString هر شی متد toString پدر هر شی را نیز فراخوانی نمایید و سپس مقادیر حاصل را خط به خط در یک فایل خروجی output.txt چاپ نمایید.کدهای حل شده این تمرین در گیتهاب : https://github.com/RasoulMadani/sport-manager-system-using-java-oop </description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Fri, 24 May 2024 09:00:14 +0330</pubDate>
            </item>
                    <item>
                <title>تمرین جاوا - سیستم مدیریت موزیک</title>
                <link>https://virgool.io/@rasoul_madani/%D8%AA%D9%85%D8%B1%DB%8C%D9%86-%D8%AC%D8%A7%D9%88%D8%A7-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D9%85%D9%88%D8%B2%DB%8C%DA%A9-m8sqrpk9buwf</link>
                <description>تمرین جاوا شی گراییبسم الله الرحمن الرحیم تمرین جاوا - سیستم مدیریت موزیک فرض کنید می خواهید آهنگهاي روي لپ تاپتان را مدیریت کنید. در این تمرین قصد داریم برنامه اي با این هدفطراحی کنیم که بتواند برچسب مناسب براي نام آهنگها در نظر گرفته و طبقه بندي و مرتب سازي آنها را انجامدهد.کلاسها و توابعی که براي هر کلاس در نظر گرفته شدهاند، در ادامه عنوان شده است. طبق این توضیحات کلاسهاي خواسته شده را پیاد سازي کنید. غیر از  setter و  getter و توابعی که صریحا به عنوان  public مشخص شده اند، بقیه توابع باید  private باشند.کلاس playlistتوابع:public Playlist(String name) ;این سازنده نام  playlist را دریافت می کند و شی می سازد.public Playlist() ;این سازنده اولین بار که فراخوانی میشود یک  playlist به نام  playlist1می سازد و یک شمارنده را هر بارافزایش داده و دفعات بعد با توجه به این شمارنده نام  playlistرا مشخص می کند. به عنوان مثال در پنجمینبار فراخوانی  playlist5 ساخته می شود.public void addSong( Song song ) ;این تابع یک آهنگ را به  playlistاضافه می کند. public void addAlbum ( Album album ) ;این تابع یک آلبوم را می گیرد و به همان ترتیب که در آلبوم ظاهر شده اند، به  playlist اضافه میکند.public boolean removeSong( Song song ) ;این تابع یک آهنگ را گرفته و از  playlist حذف می کند.public Song getCurrentSong( );آهنگی را که در حال پخش هست برمی گرداند، اگر هنوز تابع  play فراخوانی نشده و یا  stop فراخوانی شدهباشد،  null برمی گرداند . public void goNext ( ) ;آهنگ در حال اجرا را یکی جلو می برد و اگر انتهاي  playlist باشد، تابع  stop فرخوانی میشود.public void goPrevious ( );این تابع آهنگ قبلی را برمی گرداند، اگر آهنگ اول باشد، تابع  stop فراخوانی میشود .public void play ( ) ;همیشه اولین آهنگ از لیست را به عنوان آهنگ در حال اجرا قرار می دهد .public void stop ( );آهنگ در حال اجرا را  null می کند .کلاس Albumpublic Album ( String name , Artist artist , String genre ) ;یک آلبوم خالی با دریافت اطلاعات ورودي می سازد .public static Album getSingle ( ) ;این تابع هر بار که فراخوانی شود یک آلبوم یکسان با نام  single را برمی گرداند که نام خواننده و سبک آن nullاست . public Artist getArtist ( ) ;خواننده آلبوم را برمی گراند . public String getGenre ( ) ;سبک آلبوم را برمی گرداند . public String getName ( );نام آلبوم را بر می گرداند . public Boolean addSong ( Song song ) ;یک آهنگ را می گیرد و در صورتی که خواننده آن با خواننده آلبوم یکی بود، آن را به آلبوم اضافه می کند و  true برمی گرداند و در غیر این صورت  false بر می گرداند .public void removeSong ( Song song ) ;یک آهنگ را می گیرد و در صورت وجود در آلبوم آن را حذف می کند .  public Song [ ] getSongs ( ) ;همه آهنگهاي یک آلبوم را بر می گرداند . public String toString ( ) ;مشخصات یک آلبوم را به صورت یک رشته شامل نام آلبوم، نام خواننده، نام سبک و نام همه آهنگها ( به ترتیبالفبا بر می گرداند ) . کلاس songpublic Song ( String name , Artist artist ) ;این سازنده یک آهنگ با نام داده شده و نام خواننده می سازد . public String getName ( ) ;
public Artist getArtist ( ) ;

public Album getAlbum ( ) ;این توابع به ترتیب نام آهنگ، نام خواننده و نام آلبوم را برمی گردانند. اگر آهنگ در هیچ آلبومی اضافه نشدهباشد، تابع آخر  single را بر می گرداند .public String toString ( ) ;اطلاعات آهنگ شامل نام، نام خواننده و نام آلبوم را به صورت یک رشته بر می گرداند . کلاس Artistpublic Artist (String name);یک خواننده را با دریافت نام آن ایجاد می کند . public String getName();نام خواننده را بر می گرداند.public Song[] getSongs();لیست همه آهنگهای خواننده را بر می گرداند.public Album[] getAlbums();همه آلبوم های خوانده شده توسط یک خواننده را بر می گرداند.public String toString();نام خواننده و نام همه آلبومهایی را که خوانده است برمی گرداند.کدهای حل این تمرین در گیتهاب :‌ https://github.com/RasoulMadani/Music-Manager-with-java-oop </description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Fri, 24 May 2024 08:28:00 +0330</pubDate>
            </item>
                    <item>
                <title>تمرین جاوا - سیستم مدیریت کتابخانه نسخه ۲</title>
                <link>https://virgool.io/@rasoul_madani/%D8%AA%D9%85%D8%B1%DB%8C%D9%86-%D8%AC%D8%A7%D9%88%D8%A7-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-%D9%86%D8%B3%D8%AE%D9%87-%DB%B2-llckxzkaampa</link>
                <description>تمرین جاوا شی گراییبسم الله الرحمن الرحیمدر این تمرین سعی داریم تا یک سامانه مدیریت کتابخانه را مدل کنیم. این کتابخانه قرار است یک سری کتاب را در کتابخانه نگهداری کند و به اعضای کتابخانه امانت دهد. اعضا میتوانند کتاب را از کتابخانه به امانت گیرند و یا آن را پس دهند.در طراحی این سامانه، شما باید مدیریت اعضای کتابخانه، را انجام دهید و اعمالی از قبیل اضافه کردن کتاب به کتابخانه، حذف کتاب از کتابخانه، به امانت دادن کتاب به اعضا و ... در این سامانه قابل انجام باشد.نکته: ممکن است برای پیادهسازی کلاسهای خود نیازمند اضافه کردن توابع  private یا  public به کلاسها باشید. توابع زیر صرفا توابعی هستند که باید پیادهسازی شوند. همچنین در موارد مورد نیاز متدهای  getو  setبرای متغیرها بنویسید.برای مدلسازی مساله بالا نیازمند کلاسهای زیر هستیم.public class Library{}این کلاس برای مدلسازی کتابخانه بصورت کلی استفاده میشود.public class Member{}این کلاس برای مدلسازی اعضای کتابخانه استفاده میشود.public class Borrow{}این کلاس برای مدلسازی به امانت گرفتن کتاب استفاده میشود.public class Book{}این کلاس برای توصیف کتابهایی که در کتابخانه به امانت داده میشوند، استفاده میشود..public class Writer{}این کلاس برای مدلسازی نویسندهها استفاده میشود.public class Address{}این کلاس برای مدلسازی آدرس یک شخص استفاده میشود.متدهای کلاسهای زیر بدین صورت هستند:شرح متدهای کلاس:Librarypublic Library(String name);سازنده: اسم کتابخانه را به عنوان ورودی دریافت میکند.public void addMember(Member m);این تابع یک عضو به لیست اعضای کتابخانه اضافه میکند.public Member[] getMembers();لیست اعضای کتابخانه را بازمیگرداند..public void addBook(Book b);یک کتاب جدید را به لیست کتابهای کتابخانه اضافه میکند.public Book[] getExistBooks();یک آرایه از کتابهای موجود در کتابخانه را باز میگرداند.public Book[] getBorrowedBooks();یک آرایه از کتابهای قرض داده شده بر میگرداند.public Book[] getAllBooks();یک آرایه از کلیه کتابهایی که کتابخانه دارد ( چه امانت گرفته شده و چه موجود) برمیگرداند.public Borrow[] getBorrows();یک آرایه از تمام امانت های بر می گرداند.public Borrow getBorrow(int id);امانتی با شناسه  idرا برمی گرداند.متدهای کلاس: Bookpublic Book(String name, int ID, Writer[]writers, int year);سازنده: اسم کتاب، کد کتاب، نویسندگان کتاب و سال نشر کتاب را به عنوان ورودی میگیرد.برای هر یک از ویژگیهای این کلاس متد  setو  getنوشته شود.متدهای کلاس: Memberpublic Member(String name, int ID, Address address);سازنده: نام عضو کتابخانه و شناسه و آدرس آن را میگیرد.public Member(String name, int ID);سازنده: نام عضو کتابخانه و شناسه آن را میگیرد.public int getNumBorrows();تعداد کتابهای کنونی به امانت گرفته شده توسط یک عضو را باز میگرداند.public void addBorrow(Borrow borrow);یک امانت را به لیست امانتهای عضو اضافه میکند.public Borrow[] getTotalBorrows();تمام درخواستهای به امانت گرفتن کتاب را باز میگرداند.public Member getMember(int id);عضوی با شماره شناسه  idرا برمی گرداند. در صورت عدم وجود عضوی با این شماره شناسه  nullبر میگرداند.متدهای کلاس: Borrowpublic Borrow(int ID, Member m);سازنده: شناسه درخواست امانت و عضو درخواست دهنده را دریافت میکند.public int getID()شناسه خرید را باز میگرداند.public void addItem (Book book);کتاب bookرا به لیست امانت اضافه میکند.public void removeItem (Book book);کتاب  bookرا از لیست امانت حذف میکند.public Book[] getItems();خروجی این تابع یک آرایه از کتابهای موجود در درخواست امانت است.متدهای کلاس: Writerpublic Writer(String firstName, String lastName);سازنده: نام و نام خانوادگی نویسنده را دریافت میکند.متدهای کلاس: Addresspublic Address(String provinceName, String townName, String streetName, int plaque);سازنده: نام استان، نام شهر، نام خیابان و شماره پلاک را دریافت می کندنحوهی ارتباط این سامانه با کاربرانش با دستورات ورودی در  terminal است و برنامه شما باید در یک حلقه بی نهایت ورودی بخواند. قالب دستورات این سامانه بصورت سلسله مراتبی است. بدین صورت که در ابتدا نوع دستورadd , remove, report مشخص می شود. سپس موجودیتی که قرار است این دستور روی آن اعمال شود  . member , book , borrowدر نهایت نیز اطلاعات موجودیت وارد میشودبرنامه با دستور  terminate خاتمه مییابد.دستور: addدر صورتی که این دستور وارد شد در خط بعدی کاربر موجودیت مورد نیاز خود را وارد میکند.memberدرصورتی که موجودیت مشتری بود در خط های بعدی کاربر مشخصات مشتری را بدین صورت وارد میکند.شناسه مشترینام مشتریآدرس مشتری به ترتیب : نام استان، نام شهر، نام خیابان، پلاک ، هرکدام در یک خط.bookدرصورتی که موجودیت کتاب بود در خط های بعدی کاربر مشخصات کتاب را بدین صورت وارد میکند.شناسه کتابنام کتابتعداد نویسندگانمشخصات نویسندگان کتاب به ترتیب : نام، نام خانوادگی هر کدام در یک خطسال نشر کتابborrowشناسه درخواست امانتشناسه کاربر درخواست دهندهitemاین دستور برای اضافه کردن کتاب به درخواست امانت عضو است. در خطهای بعدی مشخصات itemبصورت زیر وارد میشود.شناسه درخواست امانتشناسه کتابپس از این دستور در صورتی که کتاب در کتابخانه موجود بود در امانت کسی نبود به لیست امانت مشخص شده اضافه میشودهمچنین هر یک از آرایه های  borrowedBooksو  existBooksدر کلاس  Library آپدیت می شوند. ولی در صورتی که موجود نبود اضافه نمیشود.دستور report : customersدر این حالت باید اطلاعات اعضای کتابخانه هر کدام در یک خط پرینت شود. فرمت خروجی هر مشتری بدین صورت است.از آنجا که خروجی شما به زبان انگلیسی هست فرمتهای خروجی نیز به زبان انگلیسی هست.member-ID, member-name, total-borrow-size, member addressدقت کنید آدرس مشتری به ترتیب نام استان، نام شهر، نام خیابان، پلاک پرینت شود.booksدر این حالت تعداد کتابهای موجود در کتابخانه و قابل به امانت گرفتن پرینت می شود.borrowدر این حالت شناسه درخواست امانت در یک خط به عنوان ورودی گرفته می شود و پس از آن در خط دیگر مشخصات آن امانت بهترتیب زیر در خروجی نشان داده می شود:borrow_ID, member_ID, booksListکه لیست کتابها به ترتیب به صورت زیر نمایش داده می شود :book_ID, book_name, book_year, book_writer1_name, book_writer2-name , …دستور remove : itemاین دستور یک کتاب را از لیست امانت عضو حذف میکند. ورودی خطهای بعدی برای توصیف این دستور بدین صورت است.شناسه درخواستشناسه کتابنمونه ورودی :‌addmember1alifarsshirazjamejam24reportcustomersterminateنمونه خروجی:1,ali,0,fars,shiraz,jamejam,24فایل پی دی اف این تمرین  https://github.com/RasoulMadani/oop-java-library-system--self-/blob/master/src/project1%20(library%20managment).pdf کدهای حل این تمرین در گیتهاب ‌: https://github.com/RasoulMadani/oop-java-library-system--self- </description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Thu, 23 May 2024 13:13:53 +0330</pubDate>
            </item>
                    <item>
                <title>نرم افزار DBeaver خیلی عالی برای کار با پایگاه داده</title>
                <link>https://virgool.io/@rasoul_madani/%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-dbeaver-%D8%AE%DB%8C%D9%84%DB%8C-%D8%B9%D8%A7%D9%84%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D8%AF%D8%A7%D8%AF%D9%87-nenivir3uzxv</link>
                <description>بسم الله الرحمن الرحیم بنده با نرم افزارهای زیادی برای اتصال و کار با پایگاه داده کار کرده ام ولی اخیرا با یک نرم افزار خیلی خوب به نام  DBeaver آشنا شدم که خیلی عالیه برای کار با پایگاه داده .کلی امکانات خوب داره و یکی از بهترین هاش این هست که روی هر جدولی که می زنید می تونید ارتباط اون جدول رو با سایر جداول به راحتی بفهمید و این رو به صورت شکلی به شما نشون می ده به عکس زیر توجه کنید :این امکان در کوئری های پیچیده به پایگاه داده خیلی کمک کننده خواهد بود . DBeaver کار با پایگاه داده و کلی امکانات خوب دیگه پیشنهاد می کنم روی این نرم افزار ویادگیری اون وقت بگذارید پشیمون نمی شید . </description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Thu, 23 May 2024 11:09:00 +0330</pubDate>
            </item>
                    <item>
                <title>تمرین جاوا – سیستم مدیریت کتابخانه</title>
                <link>https://virgool.io/@rasoul_madani/%D8%AA%D9%85%D8%B1%DB%8C%D9%86-%D8%AC%D8%A7%D9%88%D8%A7-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-t98yrbszobgs</link>
                <description>تمرین جاوا شی گراییبسم الله الرحمن الرحیمتمرین جاوا – سیستم مدیریت کتابخانهدر این تمرین قصد داریم یک سیستم الکترونیکی برای کمک به مدیریت کتابخانه های سنتی پیاده سازی کنیم .در این سیستم اطلاعات مربوط به کتاب های کتابخانه نگهداریمی شود که عبارتند از:  - نام کتاب ، موضوع ، ناشر ، سال نشر و اطلاعات نویسنده شامل نام، نام خانوادگی، تاریخ تولد و ایمیل آن     هدف از پیاده سازی این سیستم این است که کاربران بتوانند اطلاعات زیر را جستجو کنند :‌  - با وارد کردن نام خانوادگی تمام نویسنده هایی که آن نام خانوادگی را دارند بیابند. - با وارد کردن نام و نام خانوادگی یک نویسنده تمام کتاب هایی که آن نویسنده نوشته است را بیابند فرض     میکنیم که مجموعه نام و نام خانوادگی نویسنده ها یکتا است . - با وارد کردن نام کتاب در صورتی که آن کتاب جز دارایی های کتابخانه باشد، سایر اطلاعات مربوط به آن کتاب را    ببینید.نکته دیگری که در ارتباط با این مسئله مطرح است این است که کاربر میتواند یک کتاب را به مدت یک هفته از کتابخانه امانت بگیرد. هر کاربر میتواند به طور همزمان دو کتاب از کتابخانه را امانت گرفته باشد. به ازای هر روز تاخیر در بازگرداندن کتاب امانت گرفته شده به کتابخانه ۱۰۰۰ تومان جریمه خواهد شد.نکته ای که وجود دارد این است که از هر کتاب ممکن است چندین جلد در کتابخانه وجود داشته باشد.تابعی بنویسید که بررسی کند که آیا یک فرد میتواند یک کتاب مشخص را از کتابخانه امانت بگیرد یا خیر؟تابعی بنویسید که مبلغ جریمه یک کاربر مشخص را تعیین کند.چگونگی امانت گرفتن کتاب توسط یک کاربر و برگرداندن کتاب امانت گرفته شده را کد کنید.کدهای حل این تمرین در گیتهاب :‌ https://github.com/RasoulMadani/java-bootcamp-115/tree/main/week06/hw05/src/librarySystem </description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Thu, 23 May 2024 08:57:44 +0330</pubDate>
            </item>
                    <item>
                <title>تمرین جاوا – سیستم مدیریت بانک</title>
                <link>https://virgool.io/@rasoul_madani/%D8%AA%D9%85%D8%B1%DB%8C%D9%86-%D8%AC%D8%A7%D9%88%D8%A7-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D8%A8%D8%A7%D9%86%DA%A9-lhpf8uq2bacc</link>
                <description>تمرین شی گرایی جاوا بسم الله الرحمن الرحیم تمرین جاوا – سیستم مدیریت بانکاز مفاهیم زیر در برنامه خود استفاده کنید :مفهوم کلاس و شی نوشتن و استفاده از آنها ویژگیها محصورسازیمی خواهیم چند جزء کوچک از سیستم بانکی را شبیه سازی کنیم چهار کلاس برای شعبه ، مشتری ، حساب و کارت اعتباری با توضیحاتی که برای ویژگی هایشان در زیر آمده است بسازید.شعبه :‌  یک کلاس با نام Branch ایجاد کنید که سه ویژگی زیر را داشته باشد  ا-کد ۲- شهر ۳- درجه یک عدد صحیح از بین اعداد ۱ و ۲ و ۳ است که درجه ی شعبه را نشان میدهد.حساب :‌ یک کلاس با نام Account ایجاد کنید که دو ویژگی زیر را داشته باشد  ۱ - شماره حساب ۲- کارت اعتباری : credit Card شی ای از جنسCreditCard هست که کارت اعتباری مشتری را نشان میدهد   کارت اعتباری :‌ یک کلاس با نام CreditCard ایجاد کنید که دو ویژگی زیر را داشته باشد:   ۱ - شماره کارت  ۲- اعتبار : credit یک عدد اعشاری(double) است که میزان اعتبار باقیمانده در کارت را نشان میدهد.مشتری :‌ یک کلاس با نام Customer ایجاد کنید که دو ویژگی زیر را داشته باشد:   ۱- نام  ۲- حساب : account شیای از جنس Account است که حساب مشتری را نشان میدهد.بعد از این که کلاسها و ویژگیهایشان را تعریف کردید متدهای لازم برای مقدار دهی و فراخوانی ویژگیها ( setter getter ) را نیز بنویسید.از امکانات IDE برای نوشتن متدهای مختلف استفاده نکنید.متدtoString را برای هرکلاس پیدا سازی کنید.یک متد با نام calcustomerBalance در کلاس مشتری ایجاد کنید که اعتبار کارت اعتباری حساب مشتری را محاسبه کرده و برمی گرداند.نوع هر یک از ویژگیها که صراحتا بیان نشده اند را باید با توجه به توضیحات داده شده خودتان تشخیص دهید و از نوع مناسبی استفاده کنید.کدهای حل این تمرین در گیتهاب :‌ https://github.com/RasoulMadani/java-bootcamp-115/tree/main/week06/hw05/src/bankSystem </description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Thu, 23 May 2024 08:44:06 +0330</pubDate>
            </item>
                    <item>
                <title>تمرین جاوا - شی گرایی</title>
                <link>https://virgool.io/@rasoul_madani/%D8%AA%D9%85%D8%B1%DB%8C%D9%86-%D8%AC%D8%A7%D9%88%D8%A7-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7%DB%8C%DB%8C-xyfyzfumilzj</link>
                <description>تمرین جاوا شی گراییبسم الله الرحمن الرحیم .تمرین جاوا - شی گرایی Create an abstract NewspaperSubscription class with fields for the subscriber name, address, and rate. Include get and set methods for the name field and get methods for the address and subscription rate; the setAddress() method is abstract. Create two subclasses named PhysicalNewspaperSubscription and OnlineNewspaperSubscription. The parameter for the setAddress() method of the PhysicalNewspaperSubscription class must contain at least one digit; otherwise, an error message is displayed and the subscription rate is set to 0. If the address is valid, the subscription rate is assigned $15. The parameter for the setAddress() method of the OnlineNewspaperSubscription class must contain an at sign (@) or an error message is displayed. If the address is valid, the subscription rate is assigned $9. Finally, write an application that declares several objects of both subscription subtypes and displays their data fields. Save the files as NewspaperSubscription.java, PhysicalNewspaperSubscription.java, OnlineNewspaperSubscription.java and DemoSubscriptions.java.java.exerciezeکدهای حل این تمرین در گیتهاب :‌ https://github.com/RasoulMadani/java-bootcamp-115/tree/main/week07/hw06/src/q01 </description>
                <category>رسول مدنی</category>
                <author>رسول مدنی</author>
                <pubDate>Thu, 23 May 2024 08:32:47 +0330</pubDate>
            </item>
            </channel>
</rss>