SOLID áá¡ááŒá±áá¶ááá±á¬ááá¬ážáá»á¬ážá¡ááŒá±á¬ááºážáááŒá¬ážááá±ážáá±á¬ developer áá»á¬ážááŸáá·áºáááŒá¬ááááœá±á·áá¯á¶áá«áááºá
áá«ááá¯á·áááºážááá¯ááááá±ážááẠ"Habr" áá á¬áááºáá°á¡á¬ážáá¯á¶ážá¡ááœáẠ- "Habr" áááá¯ááá¯ážááŸááºážáá¯ááºááᯠá¡áá¯á¶ážááŒá¯á áááºááá·áº Skillbox áááºáááºážááœááºá á¬áááºážááœááºážááá·áºá¡áá« 10 áá°áááºáá»áŸá±á¬á·á á»á±ážá
Skillbox á០á¡ááŒá¶ááŒá¯áá¬ážáááº- ááá¬áá±ážá¡áœááºááá¯ááºážáááºáááºáž
"Java Developer" .
ááŒá±á¬ááºááœá±á·ááŒááºáž (ááá¯áá·áºááá¯ááºááᯠáááºáá«ááá²áá² áááŒá±á¬áá«ááŸáá·áº)
ááá¯ážááŸááºážáá±á¬ áááá¬ááá áºáá¯á á¡áááºá០ááŸááºážááŸááºážáááºážáááºáž áááá¬áá±á¬ á¡ááŸá áºáá¬á- "ááá¯áá·áºááá¯ááºááᯠáááºáá«ááá²áá² ááá¯ááºáá«ááŸáá·áºá" áááá¯ááááºáá¬áá áºáŠážá¡ááœááºá áááºážááẠáá¯ááºááœá¬ážááŒááºážááᯠááŸá±á¬ááºááŸá¬ážááẠááá¯á¡ááºááá·áºá¡ááŒáẠá¡áá¯ááºááœáẠabstraction ááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºá áœááºážááᯠááá¯ááá¯áááºá
áá¯ááºááœáẠáááºáá«ááá²áá² á¡ááá¯ááºážááŸá áºááá¯ááºážááŸááá«áá áááºážááá¯á·ááᯠáááºážáááºážáá áºáá¯á¡ááŒá Ạáá±á«ááºážá ááºááá·áºáááºá áá¬á·ááºáá¯ááºáááºááá¯ážááᯠáá áºááŒáááºáááºááá¯áá¯á¶ážáá«á áááºážááᯠá¡áá»á¬ážáá°ááŸá¬ ááááºážáá±á¡ááŒá áºááá¯á· ááŒá±á¬ááºážááá»áá¯ážáááºáááºá
OOP á á¡ááááá¬áááºááŒá áºááá·áº áá¯ááºááᯠááá¯ážááŸááºážá á±ááŒá®áž ááááºážááááºážáááœááºáá°á á±áááºá¡ááœáẠáááºážááẠááá¯á¡ááºáá«áááºá áá°áá®áá±á¬áá¯ááºááẠOrderId ááŸáá·áº SSN ááŸá áºáá¯áá¯á¶ážááŒáá·áº áá»ááºáááºááŸááºááᯠáá»á±á¬áºááŒááºáááºááá¯ááºáá±á¬ááŒá±á¬áá·áº áááá¹áááᯠá¡ááœá²áá¯á¶ážá á¬ážááá¯ááºááá·áºáá«á
Encapsulation ááá¯ááŒá±á¬ááºážáá«á
áá¯áá¹ááá®á¡áá»á¬ážá
á¯á áá±á¬á·ááºáá²ááºáá¯ááºáá¯ááºáá»á¬ážááẠá¡áááºáááŒááºááá¯ážáááºáá±áá«áááºá ááá¯ááá¯áááºááŸá¬ áá¯ááºááŒá±á¬ááºážááẠááá¯á¡ááºáááºá áááºážááᯠááááºážááááºážáá¬ážááẠááá¯á¡ááºáááºá encapsulation ááŒáá·áº ááá·áºááááᯠááá¯ááá¯ááœááºáá°á
á±ááá¯ááºáááºá áááºážááẠááá·áºá¡á¬áž áááºááŸááá¯ááºá¡ááŒá±áá¶ááᯠááá¯ááá¯áááá±á¬ááºá
áœá¬ á
ááºážáááºááááºážááááºážááá¯ááºá
á±áááºááŒá
áºáááºá
Java áá²á·áá±ážáááºááá¯áááº
ááœáá·áºáááºážááŒááºáž / áá®ážáááºááŒááºážááááá¬á
á¡á±á¬ááºáá«áá¯ááºááŒááºáá»ááºááá¯áááºááŒááºážááŒáá·áº á€áááá¬áááᯠá¡ááœááºááá°ááŸááºááááá¯ááºáááº- "áá±á¬á·ááºáá²ááºá¡á áááºá¡ááá¯ááºážáá»á¬áž (á¡áááºážá¡á á¬ážáá»á¬ážá áá±á¬áºáá»á°ážáá»á¬ážá áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá á áááº) ááᯠááá¯ážáá»á²á·ááŸá¯á¡ááœáẠááœáá·áºááá·áºáá±á¬áºáááºáž ááŒá¯ááŒááºááœááºážáá¶áááºá¡ááœáẠááááºáá¬ážáááºá" áááºááœá±á·ááœááºá ááá¯ááá¯áááºááŸá¬ áááºážááá¯á·ááẠá¡áááºážá¡ááŒá áºáá¯ááºááᯠáááŒá±á¬ááºážáá²áá² áááºážááá¯á·á á¡ááŒá¯á¡áá°ááᯠááŒá±á¬ááºážáá²ááá¯ááºá á±áááºáᯠááá¯ááá¯áááºá
á¡áááºážá¡ááŒá áºáá¯ááºááá¯á· ááŒá±á¬ááºážáá²ááŸá¯áá»á¬áž ááŒááºáááºááŒááºáááºááŒááºážá áá°áá áºá ááºážáááºááŒááºážááŸáá·áº á¡ááŒá¬ážáá¯ááºáá¯á¶ážáá¯ááºáááºážáá»á¬áž ááá¯á¡ááºááá·áºá¡áá« áááá¬áááẠá¡áá±ážááŒá®ážáá«áááºá á¡ááœáá·áº/á¡áááẠáááá¬áááᯠááá¯ááºáá¬áá±á¬ áá¯ááºááẠáááºáááºážááá¯ážááá·áºá¡áá« áááŒá±á¬ááºážáá²áá«á ááá¯á·ááŒá±á¬áá·áº áááºážááœáẠááŒá¿áá¬áá»á¬ážá áœá¬ áááºážáá«ážáá«áááºá
á€áááºááŸá¬ á€ááá±á¬ááá¬ážááᯠáá»áá¯ážáá±á¬ááºáá±á¬ áá¯ááºá á¥ááá¬áá áºáá¯ááŒá áºáááºá
áááºážááœáẠáá
áºáá¯áá¯ááᯠááŒá±á¬ááºážáá²ááẠááá¯á¡ááºáá«áá ááá¯áá»ááºáá±á¬á¡ááá¯ááºážááŸáá·áº áá»áááºáááºáá¬ážáá±á¬ áá¯ááºá á¡á
áááºá¡ááá¯ááºážá¡á¬ážáá¯á¶ážááᯠááŒá±á¬ááºážáá²ááááºááŒá
áºááŒá®áž ááŒá
áºáá±á¬ááŒá±á¬áá·áº á¡áá»áááºáá»á¬ážá
áœá¬ áá°ááááºááŒá
áºáááºá
á áá¬ážáá ááºá ááœáá·áºáááºážááŒááºáž-á¡ááááºááẠSOLID á á¡ááŒá±áá¶áá°áá»á¬ážáá²á០áá áºáá¯ááŒá áºáááºá
áá áºáŠážáááºážáá¬áááºáá°ááŸá¯áá° (SRP)
SOLID set á០áá±á¬ááºáááºáá°áá áºáá¯á "á¡áááºážá¡ááŒá±á¬ááºážá¡áá²ááᯠááŒá áºá á±áá²á· á¡ááŒá±á¬ááºážááŒáá»ááºáá áºáá¯áá² ááŸááááº" ááá¯á· ááá¯áá«áááºá á¡áááºážááœáẠáá¬áááºáá áºáá¯áá¬ááŸááááºá áááºážááœáẠáááºážáááºážáá»á¬ážá áœá¬ááŸáááá¯ááºáá±á¬áºáááºáž áááºážááá¯á·áá áºáá¯á á®ááᯠáá¬áááºááŒá¿áá¬áá áºáá¯ááŒá±ááŸááºážáááºá¡ááœááºáᬠá¡áá¯á¶ážááŒá¯áááºá áááºážáááºážáá»á¬ážááŸáá·áº áá¯ááºááá¹áááá»á¬áž á¡á¬ážáá¯á¶ážááẠá€áá»áŸáᬠááŒá áºááá·áºáááºá
á€áááá¬áááááºááá¯ážááŸá¬ áá±á¬á·ááºáá²ááºá¡á
áááºá¡ááá¯ááºážáá
áºáá¯ááŸáá·áº áá¯ááºááŒá¬ážááŸá áá»áááºáááºááŸá¯ááᯠááŒá±áá»á±á¬á·á
á±ááŒááºážááŒá
áºáááºá á¡áááºážáá
áºáá¯ááá¯á· áá¯ááºáá±á¬ááºáá»ááºáá
áºáá¯áááºááá¯ááá·áºááŒááºážááẠáá¯ááºáá±á¬ááºáá»ááºááŸá
áºáá¯ááŒá¬ážááŸá áááºá
ááºááŸá¯ááᯠááááºáááºáá±ážáááºá ááá¯á·ááŒá±á¬áá·áº áááºážááá¯á·áá²á០áá
áºáá¯ááᯠááŒá±á¬ááºážáá²áá«á ááááá
áºáá¯ááŸáá·áº áááºááá¯ááºáá±á¬ áá¯ááááá
áºáá¯ááᯠáá¯áá°ááẠá¡ááœáá·áºá¡áááºážáá±á¬ááºáž ááŸááá«áááºá áááºážááẠááŒá¿áá¬á¡á¬ážáá¯á¶ážááᯠááŒáá¯áááºááááŸáááá¯ááºá
á±áááºá¡ááœáẠá
ááºážáááºááŸá¯áá¶ááá¬áá»á¬ážááᯠááá¯ážááŒáŸáá·áºááŒááºážááᯠááá¯ááá¯áááºá
ááŸá®ááá¯ááŸá¯ ááŒá±á¬ááºážááŒááºááŸááºááŒááºážáá° (DIP)
á¡áááºáá«á¡áá»ááºááẠAppManager ááẠEventLogWriter áá±á«áºááœááºáá°áááºááá·áº áá¯ááºááá°áá¬áá
áºáá¯ááŒá
áºááŒá®áž áááºážááẠAppManager ááŸáá·áº áá®ážáááºá
áœá¬áááºá
ááºáá±áááºá á¡ááŒá±á¬ááºážááŒá¬ážáá»ááºááᯠááŒáááẠá¡ááŒá¬ážáááºážáááºážáá
áºáᯠááá¯á¡ááºáá«áá ááœááºážá¡á¬ážáá±ážááŒááºážá SMS ááá¯á·ááá¯áẠá¡á®ážáá±ážááºááŒáá·áºá áááºááẠAppManager á¡áááºážá¡á
á¬ážááᯠááŒá±á¬ááºážáá²ááẠááá¯á¡ááºáá«áááºá
ááŒá¿áá¬ááᯠDIP ááŒáá·áºááŒá±ááŸááºážááá¯ááºáááºá ááá¯á·ááŒá±á¬áá·áºá AppManager á¡á á¬ážá áá»áœááºá¯ááºááá¯á·ááẠframework ááá¯á¡áá¯á¶ážááŒá¯á ááá¯ážááá·áºááá·áº EventLogWriter áá áºáá¯ááᯠáá±á¬ááºážááá¯áá«áááºá
DIP ááẠááŸá®ááá¯ááŸá¯ áá±á¬áºáá»á°ážááᯠááŒá±á¬ááºážáá²ááŒááºážááŒáá·áº áá áºáŠážáá»ááºáž áá±á¬áºáá»á°ážáá»á¬ážááᯠá¡ááŒá¬ážáá°áá»á¬ážááŸáá·áº á¡ááœááºááá° á¡á á¬ážááá¯ážááá¯ááºá á±áá«áááºá áááºážááẠá¡ááŒá¬ážá¡áá¬áá»á¬ážááᯠáááááá¯ááºá á±áá² module áá áºáá¯ááᯠááŒá±á¬ááºážáá²ááá¯ááºá á±áááºá
á¡ááœá±áááºáá¶ááá·áºá¡á á¬áž ááœá²á·á ááºážááŸá¯
áá¯ááºááᯠááŒááºáááºá¡áá¯á¶ážááŒá¯ááẠá¡ááááááºážáááºážááŸá áºáá¯ááŸá¬ á¡ááœá±áááºáá¶ááŒááºážááŸáá·áº ááœá²á·á ááºážááŸá¯ááŒá áºááŒá®ážá áá áºáá¯á á®ááœáẠáááºážá á¡á¬ážáá¬áá»ááºáá»á¬ážááŸáá·áº á¡á¬ážáááºážáá»ááºáá»á¬ážááŸááááºá áá¯ááááá áºáá»áá¯ážá ááá¯áá»á±á¬á·ááŒá±á¬ááºážáá±á¬ááŒá±á¬áá·áº áŠážá á¬ážáá±ážáá±á·ááŸááááºá
Composition ááẠááá·áºá¡á¬áž áááºážááá¯ááºááá¹áááá»á¬ážááᯠáááºááŸááºááŒááºážááŒáá·áº run time ááœáẠclass áá áºáá¯á á¡áá°á¡áá»áá·áºááᯠááŒá±á¬ááºážáá²ááá¯ááºá á±áá«áááºá á¡ááºáá¬áá±á·á áºáá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá·áºá¡áá«ááœáẠááá¯ááá¯ááŒá±á¬ááºážááœááºááŒááºááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááᯠáá±ážááá·áº polymorphism ááᯠá¡áá¯á¶ážááŒá¯áááºá
"Effective Java" áááºáá»áŸáẠJoshua Bloch ááẠá¡ááœá±áááºáá¶ááŒááºážááẠáá±á«ááºážá ááºááœá²á·á ááºážááŸá¯ááᯠááŸá áºáááºááŒá±á¬ááºáž á¡ááŒá¶áá±ážáááºá
Barbara Liskov á¡á á¬ážááá¯ážááŒááºážáá° (LSP)
SOLID toolkit á០áá±á¬ááºáááºáá°áá áºáá¯á á¡áá»áá¯ážá¡á á¬ážááœá²áá»á¬ážááᯠá á°áá«á¡áá»áá¯ážá¡á á¬ážáá áºáá¯á¡ááœáẠá¡á á¬ážááá¯ážááááºáᯠáá±á¬áºááŒáá¬ážáááºá ááá¯ááá¯áááºááŸá¬á superclass áá áºáá¯ááŸáá·áºá¡áá¯ááºáá¯ááºáá±á¬áááºážáááºážáá»á¬ážááŸáá·áºáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážáááºáááºážá subclasses áá»á¬ážááŸáá·áºááŒá¿áá¬áá»á¬ážáááŸááá²á¡áá¯ááºáá¯ááºááá¯ááºááá·áºáááºá
LSP ááẠSingle Responsibility Principle ááŸáá·áº Responsibility Principle ááŸá áºáá¯áá¯á¶ážááŸáá·áº áááºááá¯ááºáá«áááºá á¡áááºážááœá²áá áºáá¯ááẠá¡áááºážááœá²áá áºáá¯ááẠááá¯ááá¯áá¯ááºáá±á¬ááºááá¯ááºá áœááºážááᯠáá±ážáá±á¬ááºáá«áá áááºážáá°ááᯠáá»áá¯ážáá±á¬ááºááŒá®áž áá±á¬ááºááá¯ááºážááœáẠá¡áá»áá¯á·áá±á¬ áá¯ááºáá±á¬ááºááá¯ááºá áœááºážáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáááºááá¯ááºáá«á
á€áááºááŸá¬ LSP ááŸáá·áºááá·áºáá»ááºáá±á¬áá¯ááºá¡ááá¯ááºážá¡á ááŒá áºáááºá
á§áááá¬(Rectangle r) áááºážáááºážááẠáá±á¬áá·áºááŸááºá
áá¯áá¶áá
áºáá¯á á§áááá¬ááᯠááœááºáá»ááºáááºá Square ááẠá€ááœáẠá
áá¯áá¶ááá¯ááºáá±á¬ááŒá±á¬áá·áº áááá¯ááááºááẠSquare ááá¯áá¯ááºáá±á¬ááºááŒá®ážáá±á¬áẠáá»ááºá
á®ážááœá¬ážáá«áááºá LSP áááá¬áá¡áá á¡ááŒá±áá¶áá°áááºážá
á¬ážáá»á¬ážááá¯áááºááœáŸááºážáá»ááºáá»á¬ážááá¯á¡áá¯á¶ážááŒá¯ááá·áºáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážáááºáá±á¬ááºáááºááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááá«áá²áááºážáááºáá¬áá±á¬á¡áááºážáá»á¬ážáá¡áá¬ááá¹áá¯áá»á¬ážááá¯á¡áá¯á¶ážááŒá¯ááá¯ááºááá·áºáááºá
á¡áá»áá¯ážá¡á á¬ážááœá²áá áºáá¯á áá®ážááŒá¬ážá¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºááŒá áºááá·áº á€áá°ááᯠBarbara Liskov á០1987 áá¯ááŸá Ạááœááºáááá·áºááœáẠ"Data Abstraction and Hierarchy" áá¯áá±á«áºááẠ- ááá¯á·ááŒá±á¬áá·áº áááºážáá¡áááºááŸá¬
á¡ááºáá¬áá±á·á Ạááœá²ááŒá¬ážááŒááºážáá° (ISP)
áá±á¬ááºááẠááá¯ááºáá¬áá±á¬ áááá¬áá áá°á·á¡ááá¯á¡áá á¡áá¯á¶ážáááŒá¯áá±á¬á¡ááºáá¬áá±á·á áºááᯠá¡áá±á¬ááºá¡áááºááá±á¬áºááá·áºáá«á á€áááá¬áááᯠááá¯ááºáá¬ááŒááºážááŒáá·áº á¡áá¯ááºááá¯áá¹áááá±áááᯠááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááŒá¯áá¯ááºááá·áºá¡áá« á áá áºááẠááŒá±á¬ááºážááœááºááŒááºááœááºááŸáááŒá®áž ááŒááºáááºááŒá¯ááŒááºááá¯ááºá á±ááẠáá°áá®áá±ážáááºá
á¡áá»á¬ážá á¯ááŸá¬á á¡ááºáá¬áá±á·á áºááœáẠáá¯ááºáá±á¬ááºááá¯ááºá áœááºážáá»á¬ážá áœá¬ áá áºááŒáá¯ááºáááºáá«áááºááŒá®áž client ááẠáááºážááá¯á·áá²á០áá áºáá¯áᬠááá¯á¡ááºáá±á¬á¡áá«ááœáẠá€á¡ááŒá±á¡áá±áá»áá¯áž ááŒá áºáá±á«áºáá«áááºá
á¡ááºáá¬áá±á·á áºáá áºáá¯áá±ážááŒááºážááẠááŸá¯ááºááœá±ážáá±á¬á¡áá¯ááºááŒá áºáá±á¬ááŒá±á¬áá·áºá á¡áá¯ááºááŒá®ážááœá¬ážáá±á¬á¡áá«ááœáẠáááºááá·áºá¡áá¬á០ááá»ááºá á®ážáá² ááŒá±á¬ááºážáá²ááŒááºážááẠááŒá¿áá¬ááŒá áºáááá·áºáááºá
Java ááŸá ISP áááá¬áá á¡á¬ážáá¬áá»ááºááŸá¬ áááºážáááºážáá»á¬ážá¡á¬ážáá¯á¶ážááᯠáŠážá áœá¬á¡áá±á¬ááºá¡áááºáá±á¬áºááááºááŒá áºááŒá®áž ááá¯ááŸáᬠáááºážááá¯á·ááᯠá¡áááºážáá»á¬ážááœáẠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá ááá¯á·ááŒá±á¬áá·áº áááá¬áááẠáááºážáááºážáá»á¬áž á¡áá±á¡ááœááºááᯠáá»áŸá±á¬á·áá»ááẠááŒá áºááá¯ááºáá»á±ááŸááááºá
Interface áá áºáá¯á¡ááœáẠáááá¯ááááºáá±ážááœá²ááŒááºážá á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááá¯ááºáá«á
á€ááœáẠá¡á¬ážáá¯á¶ážááẠáá¬áááºá០ááŸááºážáá«áááºá á€áá°ááᯠáá»áá·áºáá¯á¶ážááŒááºážááẠá¡ááºáá¬áá±á·á áºá¡áá Ạá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááœááºáááᯠááá¯ááºáá»á±á¬áá®ááœá±ááŒá áºá á±áá±á¬ áá¯ááºááá¯ááŒá áºá á±áááºá
variablesá return types ááá¯á·ááá¯áẠmethod argument á¡áá»áá¯ážá¡á á¬ážá¡ááœáẠá¡ááºáá¬áá±á·á áºá¡áá»áá¯ážá¡á á¬ážááᯠáááºá¡áá¯á¶ážááŒá¯ááá·áºáááºá á¥ááá¬áá áºáá¯ááẠSubClass ááẠSuperClass ááá¯á¡áá¯á¶ážááŒá¯áááºá
á¡á²áá«ááá±á¬á·-
á á¬áááºážáá¶áá«ááºáá»á¬áž= getNumbers();
áá«áá±ááá·áº ááá¯ááºáá°áž-
ArrayList áá¶áá«ááºáá»á¬áž = getNumbers();
á€áááºááŸá¬ á¡áááºááœááºááŒá±á¬áá²á·ááá·áºá¡ááá¯ááºáž áááºááœá±á· á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºáž ááŒá áºáááºá
ááá¯ááºá á¬ážááŸááºááœáŸá²á á¬
á¡áá¯á¶ážáá»á¬ážáá±á¬ á¥ááá¬ááŸá¬ Java ááŸá equals() ááŸáá·áº hashCode() áááºážáááºážáá»á¬ážááŒá áºáááºá á¡áá¬ááá¹áá¯ááŸá áºáá¯ááᯠááŸáá¯ááºážááŸááºááẠááá¯á¡ááºáá±á¬á¡áá«á á€áá¯ááºáá±á¬ááºáá»ááºááᯠclient á¡áááºážá¡á á¬áž ááá·áºáá»á±á¬áºáá±á¬á¡áááºážááá¯á· ááœáŸá²á¡ááºáááºá
áááá¬áá á¡á¬ážáá¬áá»ááºááŸá¬ áá¯ááºááᯠááœá¬ážááŒááºážáááŸááá² á¡áá°á¡áá»áá·áºááᯠááŒá±á¬ááºážáá²ááẠá¡áá±á¬áºáá±áž ááœááºáá°áá«áááºá á¡áááºážá¡áá¬áž ááá¯ááºá á¬ážááŸááºá¡ááœá²á·ááŸáá·áºáááºáž áááºááá¯ááºáá«áááºá
á€á¡ááŒá±áá¶áá°áá»á¬ážá¡á¬ážáá¯á¶ážááẠááá·áºá¡á¬áž áá±á«ááºážá
ááºážááŸá¯ááŒáá·áºáá¬ážááŒá®áž áá»áááºáááºááŸá¯áááºážáá±á¬ áá¯ááºááᯠááá¯ááá¯ááŒá±á¬ááºážááœááºááŒááºááœááºá ááŸáááŒá®áž áá¯á¶ááŒááºá
áááºáá»ááá±á¬áá¯ááºááᯠáá±ážáá¬ážááá¯ááºá
á±áá«áááºá áá¯ááºáá«áááºá áá®á¡áá¯áá®á áá±á¬ááºážáááºá áá«áá±ááá·áº developer áá
áºáá±á¬ááºáᬠáááŸááá¬áá²á· á¡ááááá¬ááᯠá¡ááŸááºáááẠá
áááºá¡áá¯á¶ážááŒá¯ááá¯á·á¡ááœáẠáááºááœá±á·áá¯ááºáá±á¬ááºááá¯á· ááá¯á¡ááºáá«áááºá OOP á á¡ááŒá±áá¶áá°áá»á¬ážááᯠáá»áœááºážáá»ááºááŒá®áž áá±á¬ááºáááá·áºááŸá¬ áá¯á¶áá±á¬á·ááºáá² ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±áž ááŒá¿áá¬áá»á¬ážááᯠááŒá±ááŸááºážáááºá¡ááœáẠáá®ááá¯ááºážáá¯á¶á
á¶áá»á¬ážááᯠáá±á·áá¬ááŒááºáž ááŒá
áºáááºá
Skillbox á០á¡ááŒá¶ááŒá¯áá¬ážáááº-
- áááºááœá±á·áááºáááºáž
"ááá¯ááá¯ááºáž Developer PRO" .- á¡áá¯á¶ážáá» á¡áœááºááá¯ááºážáááºáááºáž
"Python Data Analyst" .- ááŸá áºááŸá áºá á¬áááºááœá±á·áááºáááºáž
"áá»áœááºáá±á¬áºá PRO Web Developer áá áºáá±á¬ááºáá«" .
source: www.habr.com