Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥4
Это два популярных языка программирования, каждый из которых имеет свои особенности, предназначение и области применения.
Синтаксис: Простой и читаемый синтаксис, использующий отступы для определения блоков кода. Философия: "Читабельность превыше всего" — код должен быть читаемым и понятным.
def greet(name):
return f"Hello, {name}!"
print(greet("World"))
Синтаксис: Использует фигурные скобки
{} для определения блоков кода и точку с запятой ; для окончания выражений (хотя она часто не обязательна). Философия: Гибкость и функциональность — JavaScript позволяет писать код в разных стилях (объектно-ориентированном, функциональном и императивном). function greet(name) {
return `Hello, ${name}!`;
}
console.log(greet("World")); Веб-разработка (с использованием фреймворков, таких как Django и Flask). Научные вычисления и анализ данных (библиотеки Pandas, NumPy, SciPy). Машинное обучение и искусственный интеллект (библиотеки TensorFlow, PyTorch). Автоматизация и скрипты. Обработка текста и естественного языка. Применение: Широко используется в различных областях благодаря богатой экосистеме библиотек и простоте использования.
Веб-разработка (frontend и backend, с использованием фреймворков и библиотек, таких как React, Angular, Vue.js, Node.js). Создание интерактивных пользовательских интерфейсов. Разработка серверных приложений (Node.js). Мобильная разработка (React Native, Ionic). Разработка игр (библиотеки и фреймворки, такие как Phaser). Применение: Основной язык для веб-разработки, особенно на стороне клиента (браузера), а также широко используется на сервере с Node.js.
Интерпретируемый язык: Код Python обычно выполняется интерпретатором. Среда выполнения: Python можно запускать на сервере, рабочем столе или встраивать в другие приложения. Веб-приложения часто развертываются на сервере. Установка и управление пакетами: Пакетный менеджер pip используется для установки и управления библиотеками и зависимостями.
Интерпретируемый язык: Код JavaScript выполняется интерпретатором в браузере или в среде Node.js на сервере. Среда выполнения: Браузер (клиентская сторона) и сервер (с помощью Node.js). Установка и управление пакетами: Пакетный менеджер npm (Node Package Manager) используется для установки и управления библиотеками и зависимостями.
Динамическая типизация: Типы переменных определяются на этапе выполнения, и переменные могут менять тип во время выполнения программы. Аннотации типов: Начиная с версии 3.5, Python поддерживает аннотации типов, что позволяет указывать типы переменных, параметров и возвращаемых значений функций.
def add(a: int, b: int) -> int:
return a + b
Динамическая типизация: Типы переменных определяются на этапе выполнения, и переменные могут менять тип во время выполнения программы. Проверка типов: В JavaScript нет встроенной поддержки аннотаций типов, но можно использовать TypeScript — надстройку над JavaScript, которая добавляет статическую типизацию.
function add(a: number, b: number): number {
return a + b;
} Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20
Объектно-ориентированное программирование (ООП) — это парадигма программирования, основанная на концепции "объектов", которые могут содержать данные и код для работы с этими данными. ООП является одним из наиболее широко используемых подходов в разработке программного обеспечения, и его использование предоставляет множество преимуществ.
Объединение данных и методов, работающих с этими данными, в одном объекте. Это позволяет скрывать внутреннее состояние объекта и защищать его от внешнего вмешательства.
class Dog:
def __init__(self, name):
self.__name = name # Инкапсуляция
def get_name(self):
return self.__name
def set_name(self, name):
self.__name = name
dog = Dog("Buddy")
print(dog.get_name()) # Buddy
dog.set_name("Max")
print(dog.get_name()) # Max
Создание нового класса на основе существующего, что позволяет переиспользовать код и упрощает его поддержку.
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
dog = Dog("Buddy")
print(dog.speak()) # Woof!
Способность объектов разных классов обрабатывать данные через единый интерфейс. Это позволяет использовать один и тот же код для объектов разных типов.
class Cat(Animal):
def speak(self):
return "Meow!"
animals = [Dog("Buddy"), Cat("Whiskers")]
for animal in animals:
print(animal.speak()) # Woof! Meow!
Процесс выделения общих характеристик и скрытия деталей реализации. Это позволяет сосредоточиться на логике работы программы, а не на деталях реализации.
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
dog = Dog()
print(dog.speak()) # Woof!
Инкапсуляция и наследование позволяют переиспользовать существующий код, что уменьшает объем дублирования и упрощает сопровождение.
ООП помогает моделировать реальный мир более естественным образом, используя объекты, что делает код более понятным и структурированным.
Полиморфизм позволяет легко расширять и изменять функциональность без значительных изменений в существующем коде.
Инкапсуляция обеспечивает разделение кода на отдельные модули, что упрощает его тестирование и сопровождение.
Код, написанный в соответствии с принципами ООП, как правило, легче читать, понимать и поддерживать.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥5
Классы сами по себе являются объектами. Это один из аспектов метапрограммирования в Python, который позволяет рассматривать классы как объекты, наравне с экземплярами этих классов.
Все, включая классы, является объектами и имеет свой тип. Классы — это экземпляры метакласса
type.Поскольку классы являются объектами, их можно создавать динамически, так же как и другие объекты.
Классы могут передаваться в функции и возвращаться из них, как и любые другие объекты.
class MyClass:
pass
# Проверка типа класса
print(type(MyClass)) # <class 'type'>
def create_class(name):
if name == "Dog":
class Dog:
def speak(self):
return "Woof!"
return Dog
else:
class Cat:
def speak(self):
return "Meow!"
return Cat
AnimalClass = create_class("Dog")
animal = AnimalClass()
print(animal.speak()) # Woof!
def print_class_name(cls):
print(cls.__name__)
class MyClass:
pass
print_class_name(MyClass) # MyClass
Это "классы для классов". Метакласс определяет поведение класса и используется для создания классов. По умолчанию все классы в Python являются экземплярами метакласса
type.class MyMeta(type):
def __new__(cls, name, bases, dct):
print(f"Creating class {name}")
return super().__new__(cls, name, bases, dct)
class MyClass(metaclass=MyMeta):
pass
# Вывод: Creating class MyClass
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥1💊1
Это метод, который объявлен в абстрактном классе, но не имеет собственной реализации. Абстрактные методы предназначены для того, чтобы подклассы, наследующие абстрактный класс, обязательно реализовали эти методы. Абстрактные методы создаются с использованием модуля
abc (Abstract Base Classes).Метод, который объявлен в абстрактном классе и должен быть реализован в подклассах.
Класс, содержащий один или более абстрактных методов. Такие классы не могут быть инстанцированы напрямую.
Для создания абстрактных методов и классов.
Импортируем необходимые классы и декораторы.
Наследуемся от
ABC.Используем декоратор
@abstractmethod.from abc import ABC, abstractmethod
# Создание абстрактного класса
class Animal(ABC):
@abstractmethod
def make_sound(self):
pass
# Попытка создания экземпляра абстрактного класса приведет к ошибке
# animal = Animal() # TypeError: Can't instantiate abstract class Animal with abstract methods make_sound
# Создание подклассов, которые реализуют абстрактные методы
class Dog(Animal):
def make_sound(self):
return "Woof!"
class Cat(Animal):
def make_sound(self):
return "Meow!"
# Теперь можно создать экземпляры подклассов
dog = Dog()
print(dog.make_sound()) # Woof!
cat = Cat()
print(cat.make_sound()) # Meow!
Нельзя создавать экземпляры абстрактных классов, если в них есть нереализованные абстрактные методы.
Все абстрактные методы должны быть реализованы в неполностью абстрактных подклассах, иначе и эти подклассы останутся абстрактными.
Абстрактные методы позволяют задавать интерфейсы для классов, которые должны быть реализованы в производных классах.
Абстрактные классы и методы способствуют полиморфизму, обеспечивая одинаковый интерфейс для различных реализаций.
Подклассы обязаны реализовать все абстрактные методы, что обеспечивает единообразие и упрощает поддержку кода.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
В объектно-ориентированном программировании наследование позволяет одному классу (называемому подклассом или наследником) унаследовать атрибуты и методы другого класса (называемого суперклассом или родительским классом).
Одиночное наследование — это когда класс наследует только один родительский класс.
class Animal:
def speak(self):
return "Some sound"
class Dog(Animal):
def speak(self):
return "Woof!"
dog = Dog()
print(dog.speak()) # Woof!
Множественное наследование — это когда класс наследует несколько родительских классов.
class Animal:
def eat(self):
return "Eating"
class Pet:
def play(self):
return "Playing"
class Dog(Animal, Pet):
def speak(self):
return "Woof!"
dog = Dog()
print(dog.eat()) # Eating
print(dog.play()) # Playing
print(dog.speak()) # Woof!
Многоуровневое наследование — это когда класс наследует другой класс, который в свою очередь наследует другой класс.
class Animal:
def eat(self):
return "Eating"
class Mammal(Animal):
def walk(self):
return "Walking"
class Dog(Mammal):
def speak(self):
return "Woof!"
dog = Dog()
print(dog.eat()) # Eating
print(dog.walk()) # Walking
print(dog.speak()) # Woof!
Иерархическое наследование — это когда несколько классов наследуют один и тот же родительский класс.
class Animal:
def speak(self):
return "Some sound"
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
dog = Dog()
cat = Cat()
print(dog.speak()) # Woof!
print(cat.speak()) # Meow!
Гибридное наследование — это комбинация двух или более типов наследования. Это может быть сложная структура, включающая одиночное, множественное, многоуровневое и иерархическое наследование.
class Animal:
def eat(self):
return "Eating"
class Mammal(Animal):
def walk(self):
return "Walking"
class Bird(Animal):
def fly(self):
return "Flying"
class Bat(Mammal, Bird):
def use_sonar(self):
return "Using sonar"
bat = Bat()
print(bat.eat()) # Eating
print(bat.walk()) # Walking
print(bat.fly()) # Flying
print(bat.use_sonar()) # Using sonar
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥2💊2
Это методология управления процессом создания программного обеспечения, которая включает в себя последовательность этапов и действий, необходимых для разработки, тестирования, развертывания и поддержки программных продуктов. Цель SDLC — обеспечить структурированный и эффективный подход к разработке ПО, минимизируя риски и повышая качество конечного продукта.
На этом этапе определяются цели проекта, анализируются потребности и требования к системе. Включает сбор требований от заинтересованных сторон, анализ бизнес-процессов и создание документации с описанием требований.
Встречи с клиентами и пользователями для определения функций системы. Документирование функциональных и нефункциональных требований.
На этапе проектирования разрабатывается архитектура системы и ее компоненты. Создаются технические спецификации, включая схемы базы данных, диаграммы классов и интерфейсов, а также детализируется план реализации.Разработка диаграмм UML.Создание прототипов пользовательского интерфейса.Проектирование архитектуры системы.
На этом этапе осуществляется непосредственная разработка программного обеспечения на основе спецификаций, созданных на предыдущем этапе. Кодирование выполняется в соответствии с выбранными языками программирования и инструментами разработки. Написание кода для модулей и компонентов системы. Интеграция различных компонентов системы. Регулярное использование систем контроля версий (например, Git).
Этап тестирования включает проверку и валидацию системы для обнаружения и исправления ошибок. Тестирование проводится в различных формах, включая юнит-тестирование, интеграционное тестирование, системное тестирование и приемочное тестирование. Автоматизированное тестирование с использованием фреймворков, таких как pytest или JUnit. Ручное тестирование функциональности и пользовательского интерфейса. Тестирование производительности и безопасности.
На этом этапе программное обеспечение разворачивается в рабочей среде и становится доступным пользователям. Включает настройку серверов, развертывание баз данных и настройку инфраструктуры. Развертывание на облачных платформах, таких как AWS или Azure. Настройка и конфигурация серверов и сетей. Миграция данных и начальная загрузка данных.
Этап поддержки и сопровождения включает в себя обслуживание и улучшение системы после ее развертывания. Включает исправление ошибок, обновление функциональности и оптимизацию производительности. Обновление системы безопасности. Внесение изменений на основе отзывов пользователей. Обслуживание серверов и баз данных.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤1
Это веб-приложение, в котором как клиентская, так и серверная часть используют один и тот же код, обычно написанный на JavaScript или TypeScript. Это позволяет рендерить страницы на сервере и на клиенте, улучшая производительность и SEO.
Первоначальный рендеринг выполняется на сервере, что уменьшает время загрузки и улучшает пользовательский опыт, особенно на медленных соединениях.
Поисковые системы лучше индексируют страницы, которые уже отрендерены на сервере, что улучшает SEO по сравнению с чисто клиентскими приложениями.
Использование одного и того же кода как на клиенте, так и на сервере упрощает поддержку и развитие приложения.
Когда пользователь запрашивает страницу, сервер рендерит HTML и отправляет его пользователю. Это обеспечивает быстрый первый рендер и делает контент доступным для поисковых систем.
После получения HTML от сервера, клиентская часть "гидратирует" (или "активирует") рендеренные элементы, добавляя интерактивность с помощью JavaScript. Это позволяет приложениям работать как одностраничные приложения (SPA) после начальной загрузки.
После начальной загрузки и гидратации клиент может управлять последующими изменениями интерфейса без необходимости обращаться к серверу, улучшая отзывчивость приложения.
Установка Next.js
npx create-next-app@latest my-isomorphic-app
cd my-isomorphic-app
npm run dev
Создание страницы с серверным рендерингом
// pages/index.js
import React from 'react';
const Home = ({ message }) => (
<div>
<h1>{message}</h1>
</div>
);
export async function getServerSideProps() {
return {
props: {
message: 'Hello from the server!',
},
};
}
export default Home;
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥5
Это один из пяти принципов SOLID, которые формулируют правила для написания чистого и поддерживаемого кода в объектно-ориентированном программировании. Согласно SRP, класс или модуль должен иметь только одну причину для изменения, что означает, что он должен выполнять только одну задачу или иметь одну ответственность.
Класс должен решать одну конкретную задачу.
Если необходимо внести изменения в код, это должно быть вызвано только одной причиной. Это упрощает поддержку и тестирование кода.
class User:
def __init__(self, name, email):
self.name = name
self.email = email
def save(self):
# Сохранение данных пользователя в базу данных
print(f"Saving user {self.name} to the database.")
def send_welcome_email(self):
# Отправка приветственного сообщения на электронную почту
print(f"Sending welcome email to {self.email}.")
Для соблюдения принципа SRP разделим класс
User на два отдельных класса: один для управления данными пользователя, другой для отправки сообщений электронной почты.class User:
def __init__(self, name, email):
self.name = name
self.email = email
class UserRepository:
def save(self, user):
# Сохранение данных пользователя в базу данных
print(f"Saving user {user.name} to the database.")
class EmailService:
def send_welcome_email(self, user):
# Отправка приветственного сообщения на электронную почту
print(f"Sending welcome email to {user.email}.")
# Использование классов
user = User("Alice", "alice@example.com")
user_repository = UserRepository()
email_service = EmailService()
user_repository.save(user)
email_service.send_welcome_email(user)
Код становится проще для понимания, так как каждый класс выполняет только одну задачу.
Легче писать тесты для классов, которые имеют одну ответственность.
Проще вносить изменения в один аспект системы, не затрагивая другие.
Классы, реализующие одну задачу, могут быть повторно использованы в других частях системы или в других проектах.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
Процесс разработки продукта включает в себя несколько ключевых этапов, которые помогают структурировать и упорядочить работу над проектом.
Этот этап включает в себя сбор и анализ требований к будущему продукту. Целью является понимание того, что именно требуется создать и для кого. Включает: Встречи с клиентами и заинтересованными сторонами для обсуждения требований.
Определение функциональных и нефункциональных требований.
Анализ целевого рынка и конкурентов.
Разработка спецификаций и документации.
На этапе проектирования создается архитектура будущего продукта. Это включает:
Разработка высокоуровневой архитектуры системы.
Детальное проектирование отдельных компонентов и модулей.
Создание схем баз данных, диаграмм классов и других архитектурных диаграмм.
Разработка прототипов пользовательского интерфейса.
Этот этап включает в себя непосредственное написание кода и реализацию функциональности согласно разработанным спецификациям и проектам. Включает:
Разработка модулей и компонентов системы.
Интеграция различных частей системы.
Использование систем контроля версий для управления кодом.
Постоянная проверка кода на соответствие стандартам и требованиям.
Тестирование необходимо для обеспечения качества продукта и выявления ошибок до его развертывания. Включает:
Юнит-тестирование отдельных компонентов.
Интеграционное тестирование для проверки взаимодействия компонентов.
Системное тестирование для проверки всей системы в целом.
Приемочное тестирование для проверки соответствия требованиям клиента.
На этапе развертывания продукт готовится к запуску и становится доступным пользователям. Включает:
Настройка серверов и инфраструктуры.
Развертывание приложений в производственной среде.
Проведение окончательных проверок и тестов в реальной среде.
Подготовка и выпуск документации для пользователей и администраторов.
После развертывания продукта начинается этап его поддержки и сопровождения, чтобы обеспечить его бесперебойную работу и внедрение улучшений. Включает:
Мониторинг работы системы и исправление возникающих ошибок.
Выпуск обновлений и патчей для устранения уязвимостей и улучшения функциональности.
Поддержка пользователей и обработка их запросов.
Планирование и внедрение новых функций и улучшений.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
В Django, кастомный менеджер модели — это способ расширения стандартного менеджера модели (класса
Manager), чтобы добавить дополнительные методы для выполнения более сложных запросов к базе данных. Менеджеры используются для работы с наборами запросов (QuerySets) и предоставляют интерфейс для выполнения операций с базой данных.Вынесение часто используемых запросов в методы менеджера позволяет избежать дублирования кода.
Логика сложных запросов инкапсулируется в методы менеджера, делая код моделей и представлений более чистым и удобочитаемым.
Добавление новых методов к менеджеру позволяет выполнять специфичные для приложения операции с данными.
from django.db import models
from django.utils import timezone
class BookManager(models.Manager):
def by_author(self, author_name):
return self.filter(author__name=author_name)
def published_recently(self):
one_month_ago = timezone.now() - timezone.timedelta(days=30)
return self.filter(publication_date__gte=one_month_ago)
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
noscript = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
publication_date = models.DateTimeField()
# Подключение кастомного менеджера
objects = BookManager()
# Получение книг по автору
books_by_author = Book.objects.by_author('John Doe')
for book in books_by_author:
print(book.noscript)
# Получение книг, опубликованных за последний месяц
recent_books = Book.objects.published_recently()
for book in recent_books:
print(book.noscript)
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥5
Это класс, который представляет структуру и логику данных приложения. Модели определяют поля и поведение данных, которые будут храниться в базе данных. Django предоставляет множество типов полей и встроенных методов для создания мощных и гибких моделей.
Поле для автоматического увеличения целого числа, которое обычно используется для первичных ключей.
id = models.AutoField(primary_key=True)
Поле для хранения строк с фиксированной максимальной длиной.
name = models.CharField(max_length=100)
Поле для хранения длинных текстов.
denoscription = models.TextField()
Поле для хранения целых чисел.
age = models.IntegerField()
Поле для хранения чисел с плавающей запятой.
price = models.FloatField()
Поле для хранения булевых значений (True/False).
is_active = models.BooleanField(default=True)
Поле для хранения даты и времени.
created_at = models.DateTimeField(auto_now_add=True)
Поле для создания связи "многие к одному" с другой моделью.
author = models.ForeignKey('Author', on_delete=models.CASCADE) Поле для создания связи "многие ко многим" с другой моделью.
categories = models.ManyToManyField('Category') Поле для создания связи "один к одному" с другой моделью.
profile = models.OneToOneField('Profile', on_delete=models.CASCADE) Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7