Idéias ambiciosas!!! - página 4

 
TheXpert:
Acalme-se.
Por que, de repente? As crenças religiosas cegas estão feridas? :)
 
Andrei01:

Por que é um absurdo? Basta calcular quantas indicações são necessárias para chegar aos dados ou funções corretos.

Se você certamente sabe como contar. :)


Você vai se acalmar? o que passar? quando você cria uma nova instância de uma classe - ou seja, uma variável do tipo classe, ela cria uma duplicata da tabela de relações e é isso

O acesso aos dados, tanto na classe como na variável usual é o mesmo na velocidade, todas as medidas descritivas sobre a divisão dos direitos de acesso dentro das classes (privat, public) - tudo isso em nível de compilador, o código compilado funciona apenas com células de memória física

Bem, vamos supor que haverá uma "classe dinâmica complexa" que é engenhosamente desovada na mosca de outras classes engenhosamente desovadas. E daí? Afinal de contas, tudo será computado por uma função específica. Bem, valeu mesmo a pena construir um jardim para tais truques de circo?

A doença está progredindo? Você já foi informado várias vezes, OOP libera o programador de ações rotineiras de preparação de dados, do controle sobre o conteúdo dos dados e cabe ao programador como você implementa métodos dentro da classe ou chama funções de terceiros

OOP também é uma coisa do passado. A tendência atual é a programação orientada para o hardware, que está principalmente em C, por exemplo, CUDA. Com o lançamento de processadores com GPU, isto será ainda mais aprimorado. As empresas processadoras estão planejando parar de liberar apenas núcleos universais de processadores.

Aqui eu não sou competente, e em sua boca estas informações não parecem confiáveis

SZZY: por que eu te escrevo, não escreva bobagens em fóruns técnicos, compartilhe seus conhecimentos e se você não souber de alguma coisa, pergunte-me.

 
IgorM:


você vai se acalmar? o que passar? quando você cria uma nova instância de uma classe - ou seja, uma variável do tipo classe, ela cria uma duplicata da tabela de relações e é isso

o acesso aos dados, seja em uma classe ou em uma variável comum, é o mesmo em termos de velocidade, todas as medidas descritivas para separar os direitos de acesso dentro das classes (privada, pública) são todas em nível de compilador, o código compilado funciona apenas com células de memória física

Então aqui está uma pergunta para um especialista. Há uma classe que consiste em três matrizes dinâmicas (o tamanho em tempo de compilação é desconhecido).

Agora, por favor, calcule e compare o número de operações para acesso à matriz estática arbitrária e à matriz dinâmica dentro da classe.

 
IgorM:

Eu não sou competente aqui, e em sua boca estas informações não parecem confiáveis
Mas será que a confiabilidade das informações depende de quem as apresenta? Penso que qualquer pessoa sensata deve entender que a informação é uma coisa objetiva, não subjetiva. :)
 
Andrei01:

O que a lógica do programa tem a ver com a apresentação dos dados? Essas coisas não estão ligadas de forma alguma.

A lógica do programa são operações aritméticas em qualquer dado de entrada, enquanto a representação de dados é apenas dados em um formato ou outro.

E por definição, é impossível reduzir o código do programa com o OOP, uma vez que aparecem indicações externas aos objetos para acessar dados internos (funções e variáveis) ao invés de acesso direto. Mas como o cálculo de indicadores e referência de memória é uma operação muito lenta, o desempenho diminui de acordo.

Desenvolver aplicações OOP não é o mesmo que desenvolver bibliotecas de classe. A rigor, um desenvolvedor de biblioteca não deve _a todos_ se preocupar com o que sua biblioteca será usada por aqueles que escrevem os programas de aplicação eles mesmos. Por exemplo: um marteleiro não se importa em nada como você usa seu produto - para martelar pregos ou rachar nozes. Seu trabalho é criar uma ferramenta. Também nas classes OOP são ferramentas para resolver uma certa gama de tarefas, geralmente muito amplas e nem sempre claramente definidas (quem sabe, talvez você use um martelo para matar baratas?)

Mais uma vez, para resolver as tarefas mais simples, você não precisa de OOP. Mas, por outro lado, você não acha que todo mundo que quer martelar um prego tem que fazer um martelo para si mesmo, acha?

Claro, você pode argumentar que temos uma biblioteca de funções, por que precisamos de mais aulas? Mas neste caso você se priva de conveniências proporcionadas por mecanismos de herança, extensões de tipo, sobrecarga, etc. Grosso modo, você pode parafusar um motor caseiro a um martelo e fazê-lo funcionar à sua maneira, mas você não precisa entender o mecanismo do martelo; tudo que você precisa saber é que ele pode ser usado para martelar pregos.

Portanto, acredite-me, o OOP realmente facilita a vida daqueles programadores que escrevem aplicações. Outra coisa é que as capacidades das bibliotecas MQL5 ainda são muito limitadas, mas é uma questão de tempo, e os desenvolvedores das bibliotecas cuidarão disso (embora, é claro, eles podem ser - mas não são obrigados a ser - as mesmas pessoas). Com um sistema bem desenvolvido de bibliotecas de classe, é suficiente para um usuário-programador escrever uma ou duas linhas como "1. programa, aqui estão os dados" "2. programa, contar" em um programa, quase sem perguntar como ele funciona em detalhes. Isto não pode ser alcançado na programação orientada para a estrutura.

Parece-me que seu preconceito contra o OOP é o resultado do fato de que você ou não encontrou tarefas suficientemente complexas, ou simplesmente não quer fazê-lo devido à preguiça ou algum outro motivo. Eu diria que para nada. No entanto, o mestre é o mestre.

 
Andrei01:

Eis a pergunta de um especialista. Há uma classe que consiste em três matrizes dinâmicas (o tamanho em tempo de compilação é desconhecido).

Agora, por favor, calcule e compare o número de operações para acessar a matriz estática arbitrária e a matriz dinâmica dentro da classe.


O que as classes têm a ver com isso? Você trabalha com matrizes dinâmicas ou estáticas, e não importa onde você usa matrizes dinâmicas - em uma classe ou apenas em uma variável.

O fato de que trabalhar com matrizes dinâmicas leva um pouco mais de tempo é "óbvio" - há um controle para a ultrapassagem de matrizes e o gerente de alocação de memória dinâmica será freqüentemente chamado

 

alsu:

1. Mas, nesse caso, você está se privando da conveniência proporcionada pelos mecanismos de herança, extensões de tipo, sobrecarga, etc. Grosso modo, você pode parafusar um motor feito a mão a um martelo e fazer com que ele funcione à sua maneira, mas você não precisa entender a mecânica do martelo; tudo o que você precisa saber é que você pode martelar pregos com ele.

2. Com um sistema bem desenvolvido de bibliotecas de classe, é suficiente para um usuário-programador escrever uma ou duas linhas como "1. programa, aqui estão os dados" "2. programa, contar" em um programa, quase sem perguntar como ele funciona em detalhes. Isto não pode ser alcançado na programação orientada para a estrutura.

1. Na RPP, você também tem que lidar com as aulas - o que exatamente elas fazem. Como se fosse uma função de algum tipo. Mas com as aulas é mais difícil rastrear toda a cadeia, então geralmente se gasta mais tempo para estudar sua estrutura, no mesmo nível de funcionalidade.

2. Na programação orientada à estrutura, você também pode organizar tais ações sem nenhum problema, sem ter que entrar em detalhes que alguém já tenha entrado antes.

 
IgorM:


O que as classes têm a ver com isso? É tudo uma questão de trabalhar com matrizes dinâmicas ou estáticas, e não importa onde você usa matrizes dinâmicas - em uma classe ou apenas em uma variável

Ok, vou fazer uma pergunta mais simples. Compare o número de operações ao acessar uma variável de uma matriz unidimensional e bidimensional.

E agora você vai argumentar que não há quase nenhuma diferença?

 
Andrei01:

Ok, então eu farei uma pergunta mais simples. Compare o número de operações ao acessar uma variável em uma matriz unidimensional e bidimensional.

Você vai afirmar que não há quase nenhuma diferença?


Esta também é uma pergunta do OOP?

Se não, então: se a matriz for estática - então não haverá diferença no desempenho ao acessar ambas as matrizes unidimensionais e bidimensionais, porque os dados da matriz multidimensional são armazenados na memória por cordas, como se você tivesse matriz x[20] e matriz y[2][10], então os dados y serão gravados na memória: primeiro y[0] e depois y[1], que serão fisicamente localizados como x[20].

se houver algum atraso no desempenho, ele é insignificante e ocorre apenas por causa do controle de sobreposição da matriz

Se a matriz é dinâmica, depende do fabricante específico do compilador - quanto do código do gerenciador de memória é otimizado (em Delphi, a maior parte do módulo do sistema é escrito em ASM), porque a alocação de memória para uma matriz dinâmica multidimensional é um pouco mais complicada, mas então, o problema geralmente não está nas matrizes dinâmicas, mas no programador - quão justificada e muitas vezes ele chama alocação de memória para uma matriz dinâmica

SZS: obrigado pelo bate-papo - mas não posso por sua falta de compreensão das coisas elementares para passar tanto tempo - comece a ler você mesmo

 
IgorM:


Esta também é uma pergunta do OOP?

se não, então: se array for estático - então não haverá diferença no desempenho ao acessar tanto array unidimensional quanto bidimensional, porque os dados de array multidimensional são armazenados na memória em strings, como se você tivesse array x[20] e array y[2][10], então os dados y serão gravados na memória: primeiro y[0] e depois y[1], que serão fisicamente localizados como x[20].

Você está errado, pois não sabe as coisas mais simples.

Os dados de qualquer matriz são armazenados linearmente na memória. Do primeiro ao último, para acessar um elemento x[15], você precisa calcular o endereço do início da matriz mais o offset 15, que será o endereço da variável para calcular esta variável. Se tivermos uma matriz bidimensional, por exemplo, x[2][5], primeiro calculamos o offset para a segunda linha e depois adicionamos o offset para o quinto elemento, ou seja, o dobro das operações.