LINUX.ORG.RU

Нубовопросы по Qt

 , ,


0

4

Задумал сделать небольшую программку на Qt, возникла пара вопросов. Первый: в Qt можно писать в простом процедурном стиле, без нагромождения объектов и классов? Лениво вникать в новую для меня парадигму. Второй: как понять, что текущая парадигма снижает эффективность разработки и тормозит процесс, и что пора таки осиливать новую? На моём примере: процедурное -> ООП.

Перемещено mono из talks

1. Можно, как в Дельфи, хех.
2. Когда поймёшь плюшки сигналов и слотов - вопросов не останется. А, ну и ООП это вещь, это однозначно стоит осилить.

OldWiseCat ★★
()
Последнее исправление: OldWiseCat (всего исправлений: 2)

1. Можно.
2. С разрастанием исходника.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)

В процедурной парадигме легко запутаться когда код сильно разростается. В ООП же ты можешь создать классы, которые ты сможешь комбинировать как угодно.

Простой пример:

Ты пишешь класс, который выполняет вычисления. В классе есть конструктор, который принимает входящие параметры. В классе у тебя реализован набор методов (посчитать то, посчитать се, получить промежуточные данные, забрать лог работы, сменить состояние...).

Далее в любом месте ты можешь создать экземпляр класса, который завязан на какие-то параметры (даные ему в конструкторе). И обращаешься к существующим методам выполня те или инные действия.

Как видишь, класс — это удобная коробка с полностью реализованными фичами для любой ситуации. В итоге девелопмент сводится к разработке пачек таких классов, организации взаимодействия между ними.

Еще глянь в сторону наследования, инкапсуляции и полиморфизма. Да и вообще я не знаю как можно писать в процедурном стиле. Ну разве что только когда учишься, начинаешь.

observer ★★★
()

Первый: в Qt можно писать в простом процедурном стиле, без нагромождения объектов и классов?

Можно, пока вся твоя программа умещается в одном файле разумных размеров, в один-два экрана.

Лениво вникать в новую для меня парадигму

А придётся, и лучше сделать это раньше.

yoghurt ★★★★★
()

Я вообще не понимаю почему кто-то где-то кого-то еще учит процедурной парадигме. Нужно сразу начинать с ООП, чтобы мозги изначально думали в таком ракурсе.

А придётся, и лучше сделать это раньше.

++

observer ★★★
()

в Qt можно писать в простом процедурном стиле, без нагромождения объектов и классов?

просто оставлю тут
Я вообще удивлен что столько народу сказало можно. QT это чистое ООП, и писать в процедурном стиле как раз не получиться без лишних нагромождений.
ООП осиливать надо. Это удобно и безопасно. Писать на С++ (читай QT) без ООП это извращения чистой воды.

comp00 ★★★★
()
Последнее исправление: comp00 (всего исправлений: 1)
Ответ на: комментарий от observer

Не, саму суть ООП я вроде понимаю, просто думаю, что для моей задачи: работа с несколькими текстовыми файлами и внешними программами - это будет из пушки по воробьям.

it-nativa
() автор топика

я всегда считал, что С программисты каждый раз велосипедят свой ООП в виде структурок с полями и указателями на функции или просто городят кучу инвариантных функций, в которые пихают свои структурки. Почему бы не систематизировать эти велосипеды и не освоить ООП?

x0r ★★★★★
()
Ответ на: комментарий от it-nativa

Не, саму суть ООП я вроде понимаю, просто думаю, что для моей задачи: работа с несколькими текстовыми файлами и внешними программами - это будет из пушки по воробьям.

На ООП даже Hello Wolrd не избыточно писать.

observer ★★★
()
Ответ на: комментарий от it-nativa

Программирование начинают изучать в школах, а нагружать школьников ООП это как-то негуманно )

Не согласен. Понятие класс очень даже простое и примитивное. Надо начинать с этого.

На практике, из-за классов имеем просто несколько лишних строк. За то, если понадобится расширять проект, делать это будет куда удобнее.

И структура проекта позволит, и в мозгах будет хоть малейшее понимание.

observer ★★★
()
Последнее исправление: observer (всего исправлений: 1)

в Qt можно писать в простом процедурном стиле, без нагромождения объектов и классов?

Если использовать только встроенные возможности виджетов, то можно.

Второй: как понять, что текущая парадигма снижает эффективность разработки

Вопрос неверный. Парадигма никак не может что-то снижать или ускорять. Программист может решить задачу эффективнее, если будет владеть разными подходами к решению и выберет оптимальное сочетание ООП, ФП и других П, применительно к задаче. Вывод: лучше уметь применять ООП, чем не уметь.

no-such-file ★★★★★
()
Ответ на: комментарий от it-nativa

работа с несколькими текстовыми файлами и внешними программами

Причем тут GUI библиотека?

anonymous
()
Ответ на: комментарий от observer

В процедурной парадигме легко запутаться когда код сильно разростается. В ООП же ты можешь создать классы, которые ты сможешь комбинировать как угодно.

Ты можешь создать модули, которые можешь комбинировать как угодно без всякого дебильного ООП.

anonymous
()

Первый: Если тебе нужно два qlabel - то да. Если что-то большее - то нет.

nanoolinux ★★★★
()
Ответ на: комментарий от Kosyak

Ведь Qt не GUI библиотека...

А, ну да, раздутый комбайн тут тем более не нужен.

anonymous
()
Ответ на: комментарий от anonymous

Ты можешь создать модули, которые можешь комбинировать как угодно без всякого дебильного ООП.

Могу, но зачем?

1. Как уже говорили выше, подобные модули ПП чаще всего просто велосипеды. ООП — грамотная и универсальная парадигма.

2. Большинство современных языков программирования жестко завязано на ООП. C++, C++/Qt, Java, C#. Не используя ООП я лишаю себя ряда современных примочек.

3. Существует множество концепций/исследований/книжек/статей о ООП. Использовать популярную парадигму — эффективно и удобно.

observer ★★★
()
Последнее исправление: observer (всего исправлений: 1)
Ответ на: комментарий от observer

ООП — грамотная и универсальная парадигма.

Фанатичный бред.

Большинство современных языков программирования жестко завязано на ООП. C++, C++/Qt, Java, C#.

Только Java. C++ и C# — мультипарадигменные языки.

Существует множество концепций/исследований/книжек/статей о ООП. Использовать популярную парадигму — эффективно и удобно.

Лол, «удобная» парадигма, для которой нужны множество концепций, исследований, книжек и статей. Спасибо, посмешил.

anonymous
()
Ответ на: комментарий от anonymous

ООП — грамотная и универсальная парадигма.

Фанатичный бред.

Обоснуй.

и C# — мультипарадигменные языки.

Я плакаль. Напиши мне helloworld на c#, который бы не был объектно ориентированным.

anonymous
()
Ответ на: комментарий от anonymous

Обоснуй.

Покажи LINQ на ООП, посмеемся.

Напиши мне helloworld на c#, который бы не был объектно ориентированным.

В чем проблема? Класс будет выступать в качестве модуля. Плодить классы на каждый чих, как проповедует ООП религия, совершенно не обязательно, можно использовать более выразительные парадигмы. Java-обезьянки в пролете.

anonymous
()
Ответ на: комментарий от anonymous

Покажи LINQ на ООП, посмеемся.

Какая связь между LINQ и грамотной универсальной парадигмой?

В чем проблема? Класс будет выступать в качестве модуля. Плодить классы на каждый чих, как проповедует ООП религия, совершенно не обязательно, можно использовать более выразительные парадигмы. Java-обезьянки в пролете.

Ну вот давай, напиши helloworld на c# используя более выразительную парадигму, чем ооп.

anonymous
()
Ответ на: комментарий от anonymous

Почитал про этот ваш хваленый Qt в Википедии. Оказывается ООП настолько грамотное, универсальное и удобное, что кутешникам пришлось вкорячивать туда свой самопальный кодогенератор, а затем, натрахвашись с наколенной поделкой, они решили создавать свой декларативный язык, выкинув ООП на помойку.

anonymous
()
Ответ на: комментарий от anonymous

Оказывается ООП настолько грамотное, универсальное и удобное, что кутешникам пришлось вкорячивать туда свой самопальный кодогенератор

Ты путаешь ооп и «мультипарадигмный» c++.

anonymous
()

Время пришло осилить ООП.

trex6 ★★★★★
()

Первый: в Qt можно писать в простом процедурном стиле, без нагромождения объектов и классов?

Никак. Если даже попробуешь - только попаболь заработаешь и окружающим мозг вынесешь.

Лениво вникать в новую для меня парадигму.

Вот ответ на все твои проблемы - ты лентяй =)

MikeDM ★★★★★
()
Ответ на: комментарий от anonymous

Какая связь между LINQ и грамотной универсальной парадигмой?

Такая, что такой по-настоящему эффективной и удобной работы, как с LINQ, ты с ООП не добьешься, а значит никакая она не универсальная. Если это не понятно, смотри историю «успеха» Qt.

Ну вот давай, напиши helloworld на c# используя более выразительную парадигму, чем ооп.

Я тебе только что рассказал модульное программирование.

anonymous
()
Ответ на: комментарий от anonymous

Ты путаешь ооп и «мультипарадигмный» c++.

В Java такая же фигная, выкинули жООПу нафиг, заменив на декларативный JavaFX Script.

anonymous
()
Ответ на: комментарий от anonymous

Такая, что такой по-настоящему эффективной и удобной работы, как с LINQ, ты с ООП не добьешься, а значит никакая она не универсальная.

facepalm.png Ну напиши мне гуй на монадах, покажи как универсальна функциональщина.

Я тебе только что рассказал модульное программирование.

А нафига ты мне его рассказал? Модульное программирование есть в ооп, в функциональщине и даже в декларативщине. Только при чём тут оно?

Ты утверждал, что c# мультипарадигмный? Вот и напиши helloworld не в ооп, в подтверждение твоих слов.

anonymous
()
Ответ на: комментарий от anonymous

В Java такая же фигная, выкинули жООПу нафиг, заменив на декларативный JavaFX Script.

Ты путаешь «выкинули» и «прилепили сбоку».

anonymous
()
Ответ на: комментарий от anonymous

facepalm.png Ну напиши мне гуй на монадах, покажи как универсальна функциональщина.

Ты же заявляешь, что ООП универсально. Про функциональщину ты уже сам придумал.

А нафига ты мне его рассказал? Модульное программирование есть в ооп, в функциональщине и даже в декларативщине. Только при чём тут оно?

Модульное программирование — это и есть парадигма.

anonymous
()
Ответ на: комментарий от anonymous

Ты путаешь «выкинули» и «прилепили сбоку».

Ни в QML, ни в JavaFX Script нет ООП, так как нафиг не нужен.

anonymous
()
Ответ на: комментарий от anonymous

Ты же заявляешь, что ООП универсально.

Вон ты о чём. Ты путаешь универсальность с удобством. Скажи мне, что может сделать тот же LINQ, чего нельзя сделать в ооп?

Модульное программирование — это и есть парадигма.

Модульное программирование и ооп не являются взаимоисключающими.

И да, я всё ещё не увидел твоего кода, дерзай, пиши.

anonymous
()
Ответ на: комментарий от anonymous

Ни в QML, ни в JavaFX Script нет ООП, так как нафиг не нужен.

QML и JavaFX Script - поделки для гуя прилепленные к c++ и java. ООП там нафиг не нужен, потому что нефиг мишать ооп и декларативщину. Однако из c++ и java никто не собирается выкидывать ооп.

anonymous
()

Ещё такой вопрос

Решил сразу начать с Qt5. Как заставить qt-creator (2.8.0) использовать Qt5?

it-nativa
() автор топика
Ответ на: комментарий от anonymous

Вон ты о чём. Ты путаешь универсальность с удобством. Скажи мне, что может сделать тот же LINQ, чего нельзя сделать в ооп?

Тогда и лапша на goto тоже универсальна.

И да, я всё ещё не увидел твоего кода, дерзай, пиши.

using System;
 
class MainModule
{
    static void Main()
    {
        Console.WriteLine("Hello world!");
    }
}
anonymous
()
Ответ на: комментарий от anonymous

QML и JavaFX Script - поделки для гуя прилепленные к c++ и java.

Что означает, что ООП для GUI не годится, значит никакое оно не универсальное.

anonymous
()
Ответ на: комментарий от anonymous

Java
мультипарадигменные языки.

сможешь написать программку без класса? Ну крутой. Я то думал там main метод уже изкоробки идет как член класса ...

comp00 ★★★★
()
Ответ на: комментарий от anonymous

Тогда и лапша на goto тоже универсальна.

Кто бы спорил.

using System;
 
class MainModule
{
    static void Main()
    {
        Console.WriteLine("Hello world!");
    }
}

И вот это поделие не ооп? Ну окей. Ты там вроде утверждал, что java жёско завязана на ооп?

Большинство современных языков программирования жестко завязано на ООП. C++, C++/Qt, Java, C#.

Только Java. C++ и C# — мультипарадигменные языки.

Однако код почему-то практически идентичен:

public class HelloWorld {
	public static void main(String[] args) {
		System.out.println("Hello World!");
	}
}

Почему?

anonymous
()

Как много людей понабежало, путающих применение ООП и использование ключевого слова class.

PolarFox ★★★★★
()
Ответ на: комментарий от PolarFox

Ты путаешь «применение ООП и использование ключевого слова class» и «ООЯП и мультипарадигмальный яп».

anonymous
()

Тему надо бы обратно в talks, я считаю.

dave ★★★★★
()
Ответ на: комментарий от anonymous

И вот это поделие не ооп?

А где там ООП? Процедура одного модуля, вызывает процедуру другого модуля. Никаких объектов, посылающих друг другу сообщения, нет.

Ты там вроде утверждал, что java жёско завязана на ооп?

Ну это там основная религия. А так, да, можешь писать модульно. Просто у нее другие выразительные средства неразвиты.

anonymous
()
Ответ на: комментарий от anonymous

Ну это там основная религия. А так, да, можешь писать модульно. Просто у нее другие выразительные средства неразвиты.

Тоесть java - таки мультипарадигмальный язык, как и c# и c++?

anonymous
()
Ответ на: комментарий от anonymous

Тоесть java - таки мультипарадигмальный язык, как и c# и c++?

Технически да, но гораздо более отсталый. Суть в том, какие парадигмы поддерживаются и насколько они развиты.

anonymous
()
Ответ на: комментарий от comp00

нет, будет тот же класс, без св-в ООП.

Класс без свойств ООП — это уже не класс.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.