{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Programmation orientée objet en Perl\n", "\n", "## Références\n", "\n", "### Références sur les scalaires\n", "\n", "#### Principe" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "SCALAR(0x7fce9481cc80)\n" ] } ], "source": [ "my $v = 10;\n", "my $refv = \\$v;" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "SCALAR(0x7fce9481cc80)\n" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "print \"$refv\\n\";" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "10\n" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "print \"$$refv\\n\";" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "56\n", "56\n" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "$$refv = 56;\n", "print \"$$refv\\n\";\n", "print \"$v\\n\";" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Utilisation" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "30\n", "40\n" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "sub f1{\n", " my ($ref) = @_;\n", " $$ref = $$ref + 10;\n", "}\n", "my $v = 20;\n", "my $refv = \\$v;\n", "f1( $refv );\n", "print \"$v\\n\";\n", "f1 ( \\$v );\n", "print \"$v\\n\";" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "20\n" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "sub f2{\n", " my $v = 20;\n", " return \\$v;\n", "}\n", "my $ref = f2();\n", "print \"$$ref\\n\";" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### QCM" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "50\n" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "sub f{\n", " my ($x,$y) = @_;\n", " $$x = 20;\n", " $z = $y+10;\n", " return (\\$z); \n", "}\n", "my $v = 10;\n", "my $w = 20;\n", "my $x = f(\\$v,$w);\n", "my $y = $$x + $v;\n", "print \"$y\\n\";" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Explication des différentes réponses possibles pour le MCQ\n", "\n", "- `30` : pas de prise en compte du changement de `$v` et de `$w` par la fonction\n", "- `40` : pas de prise en compte du changement de `$v` par la fonction\n", "- `50` : pas de prise en compte du changement de `$w` dans la fonction\n", "- `60` : réponse correcte" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Références sur les tableaux\n", "\n", "#### Principe" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "10\n", "10\n" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "my @tab = (\"ab\",10);\n", "my $reft = \\@tab;\n", "my @tab2 = @$reft;\n", "print \"$tab2[1]\\n\";\n", "print \"$$reft[1]\\n\";" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "bc,11\n" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "@$reft = (\"bc\",11);\n", "print \"$tab[0],$tab[1]\\n\";" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "12\n" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "$reft->[1] = 12;\n", "print \"$tab[1]\\n\";" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Tableaux de tableaux" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2\n", "ARRAY(0x7fcf70006318)\n", "ARRAY(0x7fcf7000cc98)\n", "et\n", "20\n" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my @t1 = (\"tutu\", 10);\n", "my @t2 = (20, 30);\n", "my @t = (2, \\@t2, \\@t1, (\"et\",20));\n", "foreach my $e (@t) { print \"$e\\n\"; }" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Passage de référence d'un tableau à une fonction" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "sub f{\n", " my ($reftab) = @_;\n", " $reftab->[2] = 40;\n", "}\n", "my @tab = ( \"hello\", 10, -2 );\n", "my $ref = \\@tab;\n", "f( $ref );\n", "print \"$tab\\n\";" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### QCM" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "20ARRAY(0x7fce9481cd88)\n" ] } ], "source": [ "my $v = 10;\n", "my @t1 = (1,2, \\$v);\n", "my @t2 = (20, \\@t1);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Explications des différentes réponses possibles du QCM:\n", "\n", "- `$@$t2[1][2]` : oubli des `{}` pour déférencer des groupes de références\n", "- `${$t2[1]->[2]}` : réponse correcte\n", "- `${@{$t2[1]}[2]}` : réponse correcte\n", "- `$t2[1][2]` : oubli de déréférencer pour accéder à `$v`" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "10\n" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "print \"${$t2[1]->[2]}\\n\";" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "10\n" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "print \"${@{$t2[1]}[2]}\\n\";" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "SCALAR(0x7fce9481cc80)\n" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "print \"$@$t2[1][2]\\n\";" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Références sur les tableaux associatifs\n", "#### Principe" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "HASH(0x7ff61400b080)\n" ] } ], "source": [ "my %hash = ('Jean' => 10, 'Jacques' => 70);\n", "my $refh = \\%hash;" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "10\n" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "my %hash2 = %$refh;\n", "print \"$hash2{'Jean'}\\n\";" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "70\n", "70\n" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "print \"$$refh{'Jacques'}\\n\";\n", "print \"$refh->{'Jacques'}\\n\";" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### QCM" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "140497054187273\n" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "my $v = 10;\n", "my %hash1 = ('tata' => \\$v, 'titi' => $v, 'toto' => $v);\n", "my %hash2 = ('toto' => 3, 'tutu' => \\%hash1);\n", "my $refh = \\%hash2;\n", "my $x = $refh->{'tutu'}->{'tata'}+1;\n", "print \"$x\\n\";" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Explications des différentes réponses possibles du QCM:\n", "\n", "- `SCALAR(0x7ff615809458)` : pas de prise en compte du changement de statut de la référence quand ajout de 1\n", "- `11` : pas de prise en compte de la référence sur `$v`\n", "- `140694899430489` : réponse correcte\n", "- `Erreur` : pas de compréhension des déréférencement" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Modules\n", "\n", "## Utilisation d'un module" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "use File::Copy;" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "copy(\"files/file1.txt\",\"files/file2.txt\") or die \"Copy failed: $!\";" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "test\n", "test2\n" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "copy(\"files/file1.txt\",\\*STDOUT);" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "move(\"files/file2.txt\",\"files/file3.txt\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## QCM" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "use UnModule;" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "13\n" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "print \"@{$UnModule::reft}[0]\\n\";" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "\n" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "print \"@UnModule::t[0]\\n\";" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "\n" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "print \"@UnModule::reft[0]\\n\";" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Explication des différentes réponses du QCM\n", "\n", "- `@{$UnModule::reft}[0]` : réponse correcte\n", "- `Impossible` : pas de prise en compte du fait que `reft` est accessible\n", "- `@UnModule::t[0]` : `t` inaccessible depuis l'extérieur directement\n", "- `@UnModule::reft[0]`: besoin de deréférencer `reft`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# POO\n", "## Manipulation" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Employe=HASH(0x7fc805019840)\n" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "use Employe;\n", "my $e1 = Employe->new(\"Jean Dupont\", 2000);\n", "print \"$e1\\n\";" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "$VAR1 = bless( {\n", " 'SALAIRE' => 2000,\n", " 'NOM' => 'Jean Dupont'\n", " }, 'Employe' );\n", "\n" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "use Data::Dumper;\n", "print Dumper($e1).\"\\n\";" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Employe=HASH(0x7fc805019840)\n" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "my $e1_bis = $e1;\n", "print \"$e1_bis\\n\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Méthodes" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Jean Dupont 2000\n" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "use Employe;\n", "my $e1 = Employe->new(\"Jean Dupont\", 2000);\n", "print $e1->recuperation_info(2),\"\\n\";" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2040\n" ] } ], "source": [ "$e1->augmentation_salaire(2);" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Jean Dupont 2040\n" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "print $e1->recuperation_info(2),\"\\n\";" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## QCM" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Explication des différentes réponses du QCM:\n", "\n", "-\n", "-\n", "-\n", "-" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "IPerl 0.006", "language": "perl", "name": "iperl" }, "language_info": { "file_extension": ".pl", "mimetype": "text/x-perl", "name": "perl", "version": "5.16.0" } }, "nbformat": 4, "nbformat_minor": 0 }