یک بوت کمپ OOP: مقدمه

Summarize this content to 400 words in Persian Lang پستی در Reddit دیدم که من را به یاد دوران معلمی ام انداخت: وقتی به دانش آموزان برنامه نویسی شی گرا آموزش می دادند، اغلب با انتقال از یک زبان رویه ای تر و مبتنی بر تابع مانند جاوا اسکریپت به یک زبان کاملاً شی گرا مشکل داشتند. زبانی مانند جاوا
هنگام آموزش به یک مبتدی، ممکن است آنها را با پایتون شروع کنید و از آنها بخواهید کاری شبیه به این انجام دهند:
def greet(name):
return f”Hello, {name}!”
print(greet(“Alice”))
برای اینکه بفهمید چه اتفاقی میافتد، نیازی نیست که متخصص پایتون باشید: تابع مقداری را چاپ میکند که به عنوان پارامتر در نظر گرفته میشود. مقدار به لطف دستور بازگشت به طور ضمنی به عنوان یک رشته تفسیر می شود و شما نیازی به تعریف نوع مورد نظر خود ندارید.
این را با جاوا مقایسه کنید
public class Main {
// Method to generate a greeting
public static String greet(String name) {
return “Hello, ” + name + “!”;
}
// Main method to test the greet method
public static void main(String[] args) {
System.out.println(greet(“Alice”));
}
}
و دوباره با سی شارپ
using System;
class Program
{
// Method to generate a greeting
static string Greet(string name)
{
return $”Hello, {name}!”;
}
static void Main(string[] args)
{
Console.WriteLine(Greet(“Alice”));
}
}
این به اندازه کافی آسان است که دانش آموزان شروع به درک مفهوم برنامه نویسی شی گرا کنند، اما وقتی شروع به انتزاع می کنیم، می توانیم به طور تصادفی ساختار کلاس خود را بیش از حد پیچیده کنیم تا جایی که یک فرد جدید، مانند یک دانش آموز یا جدید استخدام، ممکن است کمی مشکل داشته باشد:
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class GreetingService {
// A functional interface for custom greeting logic
private final Function<String, String> greetingFormatter;
// Constructor to initialize with a default formatter
public GreetingService() {
this(name -> String.format(“Hello, %s!”, name));
}
// Constructor for injecting a custom formatter
public GreetingService(Function<String, String> greetingFormatter) {
this.greetingFormatter = greetingFormatter;
}
/**
* Generates a greeting for a list of names.
*
* @param names A varargs array of names.
* @return A single formatted string containing all greetings.
*/
public String generateGreetings(String… names) {
return Stream.of(names)
.filter(this::isValidName)
.map(greetingFormatter)
.collect(Collectors.joining(System.lineSeparator()));
}
/**
* Validates a name using private business logic.
*
* @param name The name to validate.
* @return True if the name is valid; false otherwise.
*/
private boolean isValidName(String name) {
return name != null && !name.trim().isEmpty() && name.chars().allMatch(Character::isLetter);
}
/**
* Logs a message to the console. (Simulating an external logger for brevity)
*
* @param message The message to log.
*/
private void log(String message) {
// Imagine this logs to an external logging service
System.out.println(“[LOG] ” + message);
}
public static void main(String[] args) {
// Set up a GreetingService with a slightly unconventional format
GreetingService service = new GreetingService(
name -> “>>> Welcome, ” + name.toUpperCase() + ” <<<”
);
// Generate greetings for multiple users
String greetings = service.generateGreetings(“Alice”, “Bob”, “”, “Charlie123”, “Dana”);
service.log(greetings);
}
}
این می تواند دانشجویان جدید یا توسعه دهندگان جوان را بترساند و به طور بالقوه افراد را از کار در این زمینه دور کند. به عنوان یک معلم در قلب و کسی که میخواهد موفقیت دیگران را ببیند، تصمیم گرفتم مجموعهای به نام OOP bootcamp را راهاندازی کنم که در اینجا در dev.to در دسترس خواهد بود، و در حال ساخت یک سایت صفحات github برای میزبانی هستم. این محتوا نیز زیبا به نظر نمی رسد، بنابراین اگر آن را پیدا کردید و دیدید که خشن به نظر می رسد، لطفاً به یاد داشته باشید که من یک توسعه دهنده سیستم/backend هستم، نه یک خدای UX/UI frontend.
من این مجموعه را همزمان با مجموعههای TUI For Christmas خود اجرا میکنم، بنابراین با خیال راحت هر دو را به طور همزمان دنبال کنید.
البته، اگر چیزی برای ساختن نداشته باشید، یک دوره خوب نیست، بنابراین ما قصد داریم چیزی کمی منحصربفردتر بسازیم (و صادقانه بگویم که خسته کننده است)، اما چیزی که ممکن است در محل کار خود بنویسید: یک برنامهریز شغل. .
حالا چی؟
Job Schedulers گاهی اوقات بخشی از سیستم های سازمانی هستند که مسئولیت اطمینان از اجرای فرآیندها و رویه ها مطابق انتظار را بر عهده دارند. در مورد سیستم های تجاری، ممکن است چیزی شبیه اطمینان از اینکه حقوق و دستمزد به موقع اتفاق می افتد، یا زمانی که فروشنده اطلاعاتی را برای مزایایی مانند بیمه پزشکی ارسال می کند، به سیستم شرکت شما وارد می شود و از حقوق شما کسر مناسبی می شود.
این نوع زمانبندیهای شغلی، ستون فقرات هر سیستم بزرگ و مؤثری هستند، و ما میخواهیم یک اسباببازی درست از خانه خودمان بسازیم!
ما ساده شروع می کنیم، راه خود را از طریق آنچه که یک زبان شی گرا را تیک می زند، بررسی می کنیم، و با استفاده از رفتار رشته ای، الگوهای ناهمگام، فراخوانی های پایگاه داده SQL و اجرای برنامه ها به طور همزمان، راه خود را به سمت طاقچه و پیچیده خواهیم برد. من از سی شارپ استفاده خواهم کرد، اما مثال هایی در جاوا خواهم آورد و جابجایی بین این دو برای شما دشوار نیست.
بعدی: تاریخچه و دلیلی برای OOP
پستی در Reddit دیدم که من را به یاد دوران معلمی ام انداخت: وقتی به دانش آموزان برنامه نویسی شی گرا آموزش می دادند، اغلب با انتقال از یک زبان رویه ای تر و مبتنی بر تابع مانند جاوا اسکریپت به یک زبان کاملاً شی گرا مشکل داشتند. زبانی مانند جاوا
هنگام آموزش به یک مبتدی، ممکن است آنها را با پایتون شروع کنید و از آنها بخواهید کاری شبیه به این انجام دهند:
def greet(name):
return f"Hello, {name}!"
print(greet("Alice"))
برای اینکه بفهمید چه اتفاقی میافتد، نیازی نیست که متخصص پایتون باشید: تابع مقداری را چاپ میکند که به عنوان پارامتر در نظر گرفته میشود. مقدار به لطف دستور بازگشت به طور ضمنی به عنوان یک رشته تفسیر می شود و شما نیازی به تعریف نوع مورد نظر خود ندارید.
این را با جاوا مقایسه کنید
public class Main {
// Method to generate a greeting
public static String greet(String name) {
return "Hello, " + name + "!";
}
// Main method to test the greet method
public static void main(String[] args) {
System.out.println(greet("Alice"));
}
}
و دوباره با سی شارپ
using System;
class Program
{
// Method to generate a greeting
static string Greet(string name)
{
return $"Hello, {name}!";
}
static void Main(string[] args)
{
Console.WriteLine(Greet("Alice"));
}
}
این به اندازه کافی آسان است که دانش آموزان شروع به درک مفهوم برنامه نویسی شی گرا کنند، اما وقتی شروع به انتزاع می کنیم، می توانیم به طور تصادفی ساختار کلاس خود را بیش از حد پیچیده کنیم تا جایی که یک فرد جدید، مانند یک دانش آموز یا جدید استخدام، ممکن است کمی مشکل داشته باشد:
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class GreetingService {
// A functional interface for custom greeting logic
private final Function<String, String> greetingFormatter;
// Constructor to initialize with a default formatter
public GreetingService() {
this(name -> String.format("Hello, %s!", name));
}
// Constructor for injecting a custom formatter
public GreetingService(Function<String, String> greetingFormatter) {
this.greetingFormatter = greetingFormatter;
}
/**
* Generates a greeting for a list of names.
*
* @param names A varargs array of names.
* @return A single formatted string containing all greetings.
*/
public String generateGreetings(String... names) {
return Stream.of(names)
.filter(this::isValidName)
.map(greetingFormatter)
.collect(Collectors.joining(System.lineSeparator()));
}
/**
* Validates a name using private business logic.
*
* @param name The name to validate.
* @return True if the name is valid; false otherwise.
*/
private boolean isValidName(String name) {
return name != null && !name.trim().isEmpty() && name.chars().allMatch(Character::isLetter);
}
/**
* Logs a message to the console. (Simulating an external logger for brevity)
*
* @param message The message to log.
*/
private void log(String message) {
// Imagine this logs to an external logging service
System.out.println("[LOG] " + message);
}
public static void main(String[] args) {
// Set up a GreetingService with a slightly unconventional format
GreetingService service = new GreetingService(
name -> ">>> Welcome, " + name.toUpperCase() + " <<<"
);
// Generate greetings for multiple users
String greetings = service.generateGreetings("Alice", "Bob", "", "Charlie123", "Dana");
service.log(greetings);
}
}
این می تواند دانشجویان جدید یا توسعه دهندگان جوان را بترساند و به طور بالقوه افراد را از کار در این زمینه دور کند. به عنوان یک معلم در قلب و کسی که میخواهد موفقیت دیگران را ببیند، تصمیم گرفتم مجموعهای به نام OOP bootcamp را راهاندازی کنم که در اینجا در dev.to در دسترس خواهد بود، و در حال ساخت یک سایت صفحات github برای میزبانی هستم. این محتوا نیز زیبا به نظر نمی رسد، بنابراین اگر آن را پیدا کردید و دیدید که خشن به نظر می رسد، لطفاً به یاد داشته باشید که من یک توسعه دهنده سیستم/backend هستم، نه یک خدای UX/UI frontend.
من این مجموعه را همزمان با مجموعههای TUI For Christmas خود اجرا میکنم، بنابراین با خیال راحت هر دو را به طور همزمان دنبال کنید.
البته، اگر چیزی برای ساختن نداشته باشید، یک دوره خوب نیست، بنابراین ما قصد داریم چیزی کمی منحصربفردتر بسازیم (و صادقانه بگویم که خسته کننده است)، اما چیزی که ممکن است در محل کار خود بنویسید: یک برنامهریز شغل. .
حالا چی؟
Job Schedulers گاهی اوقات بخشی از سیستم های سازمانی هستند که مسئولیت اطمینان از اجرای فرآیندها و رویه ها مطابق انتظار را بر عهده دارند. در مورد سیستم های تجاری، ممکن است چیزی شبیه اطمینان از اینکه حقوق و دستمزد به موقع اتفاق می افتد، یا زمانی که فروشنده اطلاعاتی را برای مزایایی مانند بیمه پزشکی ارسال می کند، به سیستم شرکت شما وارد می شود و از حقوق شما کسر مناسبی می شود.
این نوع زمانبندیهای شغلی، ستون فقرات هر سیستم بزرگ و مؤثری هستند، و ما میخواهیم یک اسباببازی درست از خانه خودمان بسازیم!
ما ساده شروع می کنیم، راه خود را از طریق آنچه که یک زبان شی گرا را تیک می زند، بررسی می کنیم، و با استفاده از رفتار رشته ای، الگوهای ناهمگام، فراخوانی های پایگاه داده SQL و اجرای برنامه ها به طور همزمان، راه خود را به سمت طاقچه و پیچیده خواهیم برد. من از سی شارپ استفاده خواهم کرد، اما مثال هایی در جاوا خواهم آورد و جابجایی بین این دو برای شما دشوار نیست.
بعدی: تاریخچه و دلیلی برای OOP