argon bulletin board

Експертно търсене  

Новини:

Регистрирането на нови потребители е временно деактивирано.

Автор Тема: обектно-ориентиран Perl  (Прочетена 7514 пъти)

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis
обектно-ориентиран Perl
« -: 03.09.2004, 18:44:00 »

Здравейте,

Реших да пратя малко код на Perl.
Много хора не очакват Perl да работи с обекти, но обектите и Пьрл не са взаимно изключващи се.
===================================================
#този код се съдържа във файл rule.pm
package rule;
#use strict;

sub new
{
   my $class = $_[0];
   my $rl = $_[1];

   my $objref =
   {
      _ruleItself => $rl,
      _num => 1,
      _total => 0
   };
   bless $objref, $class;
   return $objref;
};

sub getRule{ $_[0]->{_ruleItself} };
sub setTotal{ $_[0]->{_total}=$_[1] };

1;
===================================================
Безплатен компилатор на Perl може да бъде свален от activeperl.com. Това е един добър адрес за запознаване със синтаксиса на Perl: http://www.perldoc.com/perl5.8.4/pod/perlintro.html
Ако някой иска разяснения по кода, или как се създават инстанции на обекта, да пише тук. Ще отговоря, когато имам време.

Пращам този пост, за да не си мислят бъдещите програмисти на ФМИ, че Perl е твърде стар и безполезен език. Той все още върши добра работа.

За тези, които се интересуват, има една интересна книга, която се казва Object-Oriented Perl, която естествено в България никой няма да издаде (може да бъде открита в amazon.com или библиотеката на някой университет на запад от Будапеща)

Поздрави:
Атанас Чанев
Активен

Емил Дойчев

  • Неактивен Неактивен
  • Публикации: 278
обектно-ориентиран Perl
« Отговор #1 -: 06.09.2004, 18:49:00 »

artanis, ще ми е интересно да разбера твоето мнение по въпроса: трябва ли бъдещите програмисти да се учат да програмират на Perl или по-добре да се захванат с нещо по-модерно - JSP и/или .NET?

Да оставим на страна дискусията с лицензите и т.н. Нека да говорим само от гледна точка на възможности и перспективи.
Активен

Райчо Мукелов

  • Неактивен Неактивен
  • Публикации: 486
  • I snuggle with subwoofers
    • HULTIG - Human Language Technlogy and Bioinformatics Interest Group
обектно-ориентиран Perl
« Отговор #2 -: 07.09.2004, 01:01:00 »

А защо не Python   Не може ли малко да се разчупят шаблоните  

[This message has been edited by sasquatch (edited 07-09-2004).]
Активен

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis
обектно-ориентиран Perl
« Отговор #3 -: 07.09.2004, 12:29:00 »

г-н Дойчев,

Дот нет технологията няма да коментирам...
В развитите страни (не в развиващите се или страните от третия свят) JSP програмистите взимат около 10 пъти повече пари отколкото Perl програмистите, които ползват Perl за генериране на динамични уеб страници.

Въпреки това Perl все още се използва в някои области, като компютърната лингвистика, например, защото има своите предимства. Трябваше да напиша програма, която взима повтарящи се безконтекстни правила и съставя списък от безконтекстни правила без повторения с асициирани вероятности към всяко от тях.

Реших, че не ми се занимава с адреси към масиви от тип char или входно изходни потоци (или някои удобни класове и механизми в C++ или Delphi, които също не са толкова удобни, колкото Perl за тази цел) и използвах Perl, само че обектно-ориентиран, защото ми е по-удобно да знам, че оперирам с клас правило, а не с отделни масиви и променливи.

Колкото до Вашия конкретен въпрос, бъдещите програмисти могат да програмират на каквото си искат, ако 'се учат' значи да се учат сами.
Ако 'се учат' значи да се учат във ФМИ от преподаватели, тази тема не ме засяга.

И все пак, не мислите ли, че е малко опасно ФМИ да произвежда на конвеир JSP програмисти. Какво ще стане когато на пазара се появи новата Най-Модерна-Технология?

(за Python нямам наблюдения)

поздрави:
Атанас Чанев

[This message has been edited by artanis (edited 07-09-2004).]

[This message has been edited by artanis (edited 09-09-2004).]
Активен

Райчо Мукелов

  • Неактивен Неактивен
  • Публикации: 486
  • I snuggle with subwoofers
    • HULTIG - Human Language Technlogy and Bioinformatics Interest Group
обектно-ориентиран Perl
« Отговор #4 -: 08.09.2004, 00:49:00 »

@emil - вие всъщност Хаджиколев ли сте или Дойчев?
Активен

Емил Дойчев

  • Неактивен Неактивен
  • Публикации: 278
обектно-ориентиран Perl
« Отговор #5 -: 09.09.2004, 10:49:00 »

artanis, предполагам, че на моя пост си се опитал да отговориш, въпреки че си се обърнал към друг човек   Tip: Консултирай се с профилите на регистрираните потребители. Това понякога помага.

Очаквах някакъв коментар относно перспективи, но изглежда трябва да си изчистя стилистично въпроса. Както и да е. Все пак си намекнал нещо със сравнението на заплащането в някой части по света.

Предполагам, че не искаш да коментираш .NET защото е творение повече или по-малко на Microsoft. Аз също не харесвам особено средствата за развой на Microsоft, но това какво значение има? Ако утре ми дадат проект, които трябва да бъде проектиран и изпълнен със средствата на Microsoft едва ли ще се откажа само заради това, че не ми харесва производителя или пък не ми допада начина на налагане на продуктите им.

"Чудесно" е, че не те засяга какво се преподава във ФМИ. Не те познавам, но бях останал с впечатлението че си студент там. Вероятно съм се заблудил.

ФМИ и въобще ПУ, както и другите ВУЗ-ове, произвеждат на конвеир това което се търси и което се "смята за модерно". Преди около 10 години конвеира бълваше икономисти. Сега като че ли ситуацията е подобна с информатици. Забележи казах информатици, а не програмисти. Въпреки, че целта на много от кандидат-студентите е да "станат" именно програмисти. Тук няма да развивам моята теория, че не от всяко дърво става свирка, и че за да станеш зидар не ти трябва университет.

Прав си да попиташ какво ще стане когато излезе най-новата модерна технология. Бих попитал същото всички студенти, които очакват като звършат висшето си образование да са брилянтни програмисти (на модерния в момента език). Според мен правилният отговор е, че хората които са наясно с теорията и принципите няма да имат особени проблеми да усвоят и разберат новата технология за разумно време. Обикновенно целта на лекциите е именно таква. За съжаление много малко хора им отдават някакво значение, от тях още по-малко ги посещават ... имам и какво още да добавя тук, но ще си замълча за да не засегна някого.

(sasquatch и аз не съм запознат с python).

Поздрави,
Емил Дойчев.
Активен

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis
обектно-ориентиран Perl
« Отговор #6 -: 09.09.2004, 11:39:00 »

Здравейте г-н Дойчев,

Извинявам се за грешката. Може би трябва да се консултирам с профилите. Въпреки това моят вече не е актуален. Взел съм всичките изпити за бакалавър по информатика, а на 6ти Юли тази година успешно защитих дипломната си работа.

Ще започна с .НЕТ, който пак няма да коментирам. Ще започна да го коментирам, когато започнат да ми плащат за реклама, а ще стане най-хубавата технология за мен, ако започна да си изкарвам парите с него.

Не ме засяга какво преподават във ФМИ, защото де юре вече взех дипломата си. Аз съм доволен от това, което съм получил от ФМИ за тези 4 години. Не казвам, че всичко е наред. Но за цената, която плащам, обучението във ФМИ е изгодна сделка (важно е, че ФМИ дава възможности на хората, които искат да се развиват. а на специализация в чужбина може да отиде всеки! НЕ Е НУЖНО родителите му да са познати на някои от преподавателите или г-н декана!). Колкото до другите студенти, не знам по-добре от тях, какво е по-добре за самите тях.

Лекциите не са задължителни. На тях може да ходи който си поиска. Ако някой изпитва трудности, когато усвоява новата технология и причината е, че не е ходил на лекции, това е негов проблем, защото той е избрал да не ходи на лекции, никой не му го е наложил на сила.

... За съжаление аз също не Ви познавам. Но беше удоволствие за мен да се запозная поне виртуално с Вас.

поздрави:
Атанас Чанев
бакалавър по информатика
Активен

Райчо Мукелов

  • Неактивен Неактивен
  • Публикации: 486
  • I snuggle with subwoofers
    • HULTIG - Human Language Technlogy and Bioinformatics Interest Group
обектно-ориентиран Perl
« Отговор #7 -: 09.09.2004, 20:19:00 »

Python e идеален език за начинаещи (и не само) - изцяло обектно ориентиран, с добър дизайн, преносим и с богати библиотеки. За повече информация http://www.python.org

[This message has been edited by sasquatch (edited 09-09-2004).]
Активен

Цуйка

  • Гост
обектно-ориентиран Perl
« Отговор #8 -: 10.09.2004, 09:32:00 »

Евала Sasquatch :)
Активен

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis
обектно-ориентиран Perl
« Отговор #9 -: 10.09.2004, 14:59:00 »

Първи впечатления от питон:

- няма съкратен инкрементиращ и декрементиращ оператор (а++; а--) (в пърл тези неща ги има)
- няма ограждащи скоби, а похвата с отместването е малко tricky, особено при по-големи, предварително написани скриптове (в пьрл има) (но може този проблем да е решен с помощта на някои редактор с поддръжка на питон)
+ има референции към функция (в пърл не съм сигурен дали има) (само в Ада 95 съм виждал подобно нещо) отбелязвам го като предимство, защото с този похват програмата може да бъде по-четлива. Нямам представа за какво друго мога да използвам адреси към функции. Моля някой да каже във форума, ако е компетентен.

До обектите още не съм стигнал, нито до регулярните изрази (ако има).

поздрави:
Атанас Чанев
Активен

Райчо Мукелов

  • Неактивен Неактивен
  • Публикации: 486
  • I snuggle with subwoofers
    • HULTIG - Human Language Technlogy and Bioinformatics Interest Group
обектно-ориентиран Perl
« Отговор #10 -: 10.09.2004, 16:24:00 »

>>>Originally posted by Цуйка:
Евала Sasquatch    
Еми кво да се прави - не е ли така ?
P.S.  Стига са ебавал фе  

[This message has been edited by sasquatch (edited 10-09-2004).]
Активен

Цуйка

  • Гост
обектно-ориентиран Perl
« Отговор #11 -: 10.09.2004, 18:19:00 »

artanis, това с отместването не е tricky, това е тест... ти явно си се издънил. Щом ти е трудно и непривично да го правиш значи явно не си свикнал да си подреждаш кода. Хубавото на този синтаксис е че правилния стил на програмиране е заложен в езика. Ако не пишеш красиви програми - те просто няма да тръгнат. И един страничен ефект от това - всички програми на Python изглеждат по един и същи начин и се четат еднакво лесно.
Това, на което викаш "адрес на функция" не е адрес на функция. Това е "референция към обект от тип Функция". И това си е напълно пълноценен обект, както всеки друг. Има си полета и методи   Метод на функция   Също като в Lisp (ако си спомняш). И въобще, бая неща в Python са взети директно от Lisp (като например slice notation а и lambda функциите). А ако ти кажа, че има и "обект от тип Клас", и че на нещото, което го създава му се вика "Метаклас", сигурно съвсем ще обелиш очите...
А за какво можеш да го използваш ли? Factory говори ли ти нещо? Полиморфизъм? Функционално програмиране? Бла бла...

Можеш ли някъде другаде да правиш това?
x, y, z = 1, 2, 3
Това е еквивалентно на:
x, y, z = range(1, 4)
Един вид може ли една функция да върне много резултати едновременно? Не съм учил Perl... може и да ги има тези неща, не знам, обаче много се съмнявам.

Виж сега какво можеш да правиш само със slice изразите:
да кажем, че имащ списък s = [1, 2, 3, 4, 5, 6]
s[1] = 1
s[0:4] = [1, 2, 3, 4]
s[0:4:2] = [1, 3] (взема от 0 до 4, без 4  през 2)
s[:2] = [1, 2] (взема от началото до индекс 2, без 2)
s[2:] = [3, 4, 5, 6] (взима от индекс 2 до края)
s[2:-1] = [3, 4, 5] (взима от 2 до предпоследното)
s[:] = [1, 2, 3, 4, 5, 6] (прави копие на списъка)
s[::-1] = [6, 5, 4, 3, 2, 1] (прави копие в обратен ред)
Аналог на car е s[0], а на cdr е s[1:] (глава и опашка).

Виж сега какво можеш да правиш със списъчни обобщения:
[x * 2 for x in s] = [2, 4, 6, 8, 10, 12] (нов списък от умножените по 2 елементи на стария)
[x * 2 for x in s if x % 2 == 0]  = [4, 8, 12] (нов списък от умножените по 2 четни елементи на стария)
p = [1, 2, 3, 4, 5]
[(x, y) for x in s for y in p if (x * y) % 2 != 0] (нов списък от наредени двойки (a, b), такива, че a принадлежи на s, b принадлежи на p и a * b е нечетно)
[blah(x) for x in s] (ей ти типичното приложение на функционалните обекти - blah може да е която си искаш функция и всеки път, когато я сменяш, горния ред ще дава различен резултат (полиморфен код))

И освен всичко това Python поддържа и речници (можеш да си наследиш списък или речник без проблеми), итератори, генератори, множествено наследяване, едноредови (lambda) функции, пакетна йерархия, подобна на тази в Java, мултитрединг, persistent обекти чрез сериализация, интроспекция на всичко и каквото още се сетиш. Освен това мога да кажа, че този език пристига с една от най-богатите стандартни библиотеки, които съм виждал.

Абе... за да оцениш езика трябва да имаш необходимост от тези неща. Ако всичко, което ти трябва е a++ и RegExp ове - давай с Perl, обаче поне по мое мнение, тва си е чисто губене на време... Пък и я ми обясни, ти дето се занимаваш с лингвистика за какво са всичките $ на PHP и Perl? Как може всички други езици да се оправят без тях? Мен ако питаш на създателите им просто им е било по-лесно да напишат парсера така. Компромисче един вид. После сигурно са се оправдавали с нещо от сорта на "С $ се парсва по-бързо..."...

RegExp функциите са в модула 're'. Perl съвместими са.
Активен

mircho

  • Неактивен Неактивен
  • Публикации: 335
обектно-ориентиран Perl
« Отговор #12 -: 10.09.2004, 19:45:00 »

Уважаеми г-н Цуйка,
Бихте ли ми се обадили, за да обсъдим заедно една академична оферта към Вас?
С поздрав,
Д. М.
Активен

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis
обектно-ориентиран Perl
« Отговор #13 -: 10.09.2004, 20:31:00 »

Уважаеми г-н Цуйка,

Представете си следната ситуация. Пишете няколко вложени цикъла и в последния цикъл викате функция с няколко параметъра. За съжаление имената са описателни, защото искате да спазвате добрия стил на програмиране и функцията не може да се събере на един ред. Реда се пренася. Тогава какво става с подредения код?

В Ада 95 става дума за референция към функция (не съм казал 'адрес на функция'). Не съм сигурен дали в Пърл има нещо такова. Дори и да има, то не е обектно-ориентирано, защото обектната ориентираност е надградена и неестествена за Пърл.

>x, y, z = 1, 2, 3 според мен не е добър стил на програмиране.

Защо да обелвам очите, когато споменавате "Метаклас". Изразявате се много колоритно, няма съмнение.

След като не сте учили и не разбирате от Пърл, откъде знаете, че Питон е по-добър? По света има много програмисти, които програмират с Пърл, както има и много, които програмират с Питон.
btw какво не Ви харесва на $ пред всяка променлива (ако променливата е от тип масив $ е @, а ако е хеш таблица е %).

поздрави:
г-н Тъмно Ирландско Пиво

[This message has been edited by artanis (edited 10-09-2004).]
Активен

Емил Дойчев

  • Неактивен Неактивен
  • Публикации: 278
обектно-ориентиран Perl
« Отговор #14 -: 11.09.2004, 10:19:00 »

Уважаващи се г-да artanis и Цуйка (щом сте взели да се уважавате...),

Спорът Ви е безмислен. От това, което прочетох за Phyton моето скромно мнение е: това е БОЗА!!! Дано никой никога не пожелае от мен да програмирам на него.

Иначе Phyton може би е подходящ за някакъв извратен вид обучение, наред с другата боза - Lisp и други подобни.

Хайде пак: С уважение....
Активен

Райчо Мукелов

  • Неактивен Неактивен
  • Публикации: 486
  • I snuggle with subwoofers
    • HULTIG - Human Language Technlogy and Bioinformatics Interest Group
обектно-ориентиран Perl
« Отговор #15 -: 11.09.2004, 13:42:00 »

Каква я мислихме каква стана ... Виждал съм 3D игра (Blade of Darkness) части от която са писани на Python, Python  не е боза, а език за програмиране от много високо ниво.
Активен

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis
обектно-ориентиран Perl
« Отговор #16 -: 11.09.2004, 16:38:00 »

Здравейте,

Въпреки, че начинът на изразяване на уважаемия г-н Цуйка никак не ми харесва (друг е въпросът как ще се изказва, ако трябва да преподава на студенти), в случая съм на неговата страна за Лисп и Питон. Аз, лично съжалявам, че Лисп не се изучаваше по-подробно докато учех.

Колкото до Питон, никой не пречи на г-н Дойчев да не го харесва. Но на него програмират много хора по света, които го харесват и по-важното - върши им работа. Питон е вграден в Линукс (или поне версията, която ползвам), така че не се наложи дори да го инсталирам (Пърл също е вграден).

Аз съм против произвеждането на конвеир на определен тип програмисти, така че бих подкрепил спец-курс или факултативен курс по Питон. (Дали ще бъде воден от г-н Цуйка или от някой друг не е моя работа)

г-н sasquatch,

Моля, не използвайте неприлични думи. Всеки умее да си служи с тях, особено на балканите. Но когато става въпрос за професионализъм, на балканите отстъпваме. Аз, Вие, г-н Цуйка и други като нас трябва да променим това схващане. Съгласен ли сте?

поздрави:
Атанас Чанев

Активен

Райчо Мукелов

  • Неактивен Неактивен
  • Публикации: 486
  • I snuggle with subwoofers
    • HULTIG - Human Language Technlogy and Bioinformatics Interest Group
обектно-ориентиран Perl
« Отговор #17 -: 12.09.2004, 14:20:00 »

Г-н artanis, извинявам се ако съм Ви обидил по някакъв начин, но най неприличната дума която съм използвал е "боза" (ако има в нея нещо неприлично изобщо), така че забележката ви е малко пресилена. Колкото до начина на изразяване на г-н Цуйка - сигурен съм че може и по-добре (в смисъл културно). От друга страна нищо не пречи да започнем да си пишем на литературен български език без да ползваме жаргонни думи, но тогава нещата ще станат някак стерилни - това все пак е форум, не "Държавен вестник   Естествено това не означава че форума е място за обиди и подобни неща.
Активен

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis
обектно-ориентиран Perl
« Отговор #18 -: 12.09.2004, 16:01:00 »

г-н sasquatch,

Смея да твърдя, че до този момент няма обективна преценка за това, какво е 'литературен български език'. Колкото до езика на който пишат в държавен вестник, ако започнем да го използваме има много голям риск да не се разберем. Причината е, че целта на законите и наредбите, които са публикувани там е да бъдат максимално многозначни и неразбираеми (похватите са ясни: използване на многозначни думи, твърде дълги сложни изречения и т.н.)

Тъй като в момента дори няма обективна преценка какво е и какво не е български език, предлагам да използваме кратки и еднозначни изречения, да следим кой какво е писал (не кой какво е искал да каже) и да спазваме добрия тон. Смятам, че ако следваме горните препоръки, ще можем по-лесно да се разберем, а съобщнията ни във форума ще бъдат по-полезни на хората, които ги четат.

извинявам се за отклонението,
поздрави: Атанас Чанев
Активен

Емил Дойчев

  • Неактивен Неактивен
  • Публикации: 278
обектно-ориентиран Perl
« Отговор #19 -: 13.09.2004, 11:07:00 »

sasquatch,

Както казах, нямам никакви наблюдения върху Python като език за програмиране. Мнението, което изразих си го съставих на база изложените по-горе, от Цуйка,  "възможности" на езика. В по-голямата си част всички тези "възможности" могат да помогнат единствено да се направи кода значително по-нечитаем - т.е. да заприлича на боза.

artanis,

Както казах вече, университета трудно би произвеждал на конвеир каквото и да е просто защото това е Университет, а не занайтчийница. Основното на което (би трябвало да) се набляга е принципи и теория. Тъй като само суха теория е доста трудно да се разбере освен лекции има и упражнения, където се показват в действие някой от теоретичните моменти. За това обаче в повечето случаи (за информатичните дисциплини) е необходимо да се използва някакъв език за програмиране.

За такъв подходящ език смятаме Java. Това е напълно обектно-ориентиран език, с който могат да бъдат илюстрирани повечето от теоретичите постановки. Не че няма и други напълно ОО-езици, но този е достатъчно поулярен. Ако се използва език като SmallTalk например, ще е проблем за студентите да намират литература за него.

За да може да се използва който и да е език обаче би трябвало студентите да са запознати с основите му - ето за това има упражнения посветени само на Java. Но нали не мислиш, че с 20-30-40 часа упражнения може да се научи даден език до такова ниво, че да може да се твърди, че се "бълват" програмисти на Java? Аз работя професионално на Java от 6 години, от времето когато този език не ставаше за сериозни приложения, и въпреки това не мога да твърдя, че го познавам 100%.

Освен това по същия начин във ФМИ се изучават и други езици - Pascal, C++. Ето сега вероятно ще има и спецкурс по Python. Никой обаче не може, а и не би трябвало, да разчита, че само с един-два спецкурса ще може да се нарече "програмист" на даден език. Това не е нещо, което може да се научи в Университет, нито пък му е там мястото.

Та просто исках да ти обясня, че няма начин от ФМИ да излязат на конвеир програмисти на какъвто и да е език. Би било жалко ако беше така защото обикновеният програмист е на най-ниското ниво в IT йерархията и някак си не върви в Университет да се "учи за програмист", нали?

Активен