Information

2.11: Objects and Classes - Biology

2.11: Objects and Classes - Biology


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

This book, when initially introducing Python, mentioned some of the features of the language, such as its emphasis on “one best way” and readable code. Python also provides quite a bit of built-in functionality through importable modules such assys,re, andsubprocess.

Python provides another advantage: it is naturally “object oriented,” even though we haven’t discussed this point yet. Although there are competing paradigms for the best way to architect programs, the object-oriented paradigm is commonly used for software engineering and large-project management.[1] Even for small programs, though, the basic concepts of object orientation can make the task of programming easier.

An object, practically speaking, is a segment of memory (RAM) that references both data (referred to by instance variables) of various types and associated functions that can operate on the data.[2] Functions belonging to objects are called methods. Said another way, a method is a function that is associated with an object, and an instance variable is a variable that belongs to an object.

In Python, objects are the data that we have been associating with variables. What the methods are, how they work, and what the data are (e.g., a list of numbers, dictionary of strings, etc.) are defined by a class: the collection of code that serves as the “blueprint” for objects of that type and how they work.

Thus the class (much like the blueprint for a house) defines the structure of objects, but each object’s instance variables may refer to different data elements so long as they conform to the defined structure (much like how different families may live in houses built from the same blueprint). In Python, each piece of data we routinely encounter constitutes an object. Each data type we’ve dealt with so far (lists, strings, dictionaries, and so on) has a class definition—a blueprint—that defines it. For example, lists have data (numbers, strings, or any other type) and methods such as.sort()and.append().

In a sense, calling object methods makes a request of the object:nums_list.sort()might be interpreted as “object referred to bynums_list, please run yoursort()method.” Upon receiving this message, the object will reorder its data.[3]

Creating New Classes

Definitions for Python classes are just blocks of code, indicated by an additional level of indentation (like function blocks, if-statement blocks, and loop blocks). Each class definition requires three things, two of which we are already familiar with:

  1. Methods (functions) that belong to objects of the class.
  2. Instance variables referring to data.
  3. A special method called a constructor. This method will be called automatically whenever a new object of the class is created, and must have the name__init__.

One peculiarity of Python is that each method of an object must take as its first argument a parameter calledself,[4] which we use to access the instance variables. Let’s start by defining a class,Gene(class names traditionally begin with a capital letter): eachGeneobject will have (1) anid(string) and (2) asequence(also a string). When creating aGeneobject, we should define itsidandsequenceby passing them as parameters to the__init__method.

Outside of the block defining the class, we can make use of it to create and interact withGeneobjects.

(Normally we don’t includeprint()calls in the constructor; we’re doing so here just to clarify the object creation process.) Executing the above:

Note that even though each method (including the constructor) takes as its first parameterself, we don’t specify this parameter when calling methods for the objects. (For example,.print_id()takes aselfparameter that we don’t specify when calling it.) It’s quite common to forget to include this “implicit”selfparameter; if you do, you’ll get an error likeTypeError: print_id() takes no arguments (1 given), because the number of parameters taken by the method doesn’t match the number given when called. Also, any parameters sent to the creation function (Gene("AY342", "CATTGAC")) are passed on to the constructor (__init__(self, creationid, creationseq)).

What isself? Theselfparameter is a variable that is given to the method so that the object can refer to “itself.” Much like other people might refer to you by your name, you might refer to yourself as “self,” as in “self: remember to resubmit that manuscript tomorrow.”

Interestingly, in some sense, the methods defined for classes are breaking the first rule of functions: they are accessing variables that aren’t passed in as parameters! This is actually all right. The entire point of objects is that they hold functions and data that the functions can always be assumed to have direct access to.

Let’s continue our example by adding a method that computes the GC content of theself.sequenceinstance variable. This method needs to be included in the block defining the class; notice that a method belonging to an object can call another method belonging to itself, so we can compute GC content as a pair of methods, much like we did with simple functions:

Resulting in the output:

It can also be useful to write methods that let us get and set the instance variables of an object. We might add to our class definition methods to get and set the sequence, for example, by having the methods refer to theself.seqinstance variable.

We could make use of this added functionality later in our code with a line likeprint("gene A's sequence is " + geneA.get_seq())orgeneA.set_seq("ACTAGGGG").

Although methods can return values (as with.base_composition()and.gc_content()) and perform some action that modifies the object (as with.set_seq()), the principle of command-query separation states that they shouldn’t do both unless it is absolutely necessary.

Is it possible for us to modify the instance variables of an object directly? It makes sense that we can; because the gene object’s name for itself isselfand sets its sequence viaself.sequence, we should be able to set the gene object’s sequence using our name for it,geneA. In fact,geneA.sequence = "ACTAGGGG"would have the same result as callinggeneA.set_seq("ACTAGGGG"), as defined above.

So why might we want to use “getter” and “setter” methods as opposed to directly modifying or reading an object’s instance variables? The difference is related a bit to politeness—if not to the object itself, then to whomever wrote the code for the class. By using methods, we are requesting that the object change its sequence data, whereas directly setting instance variables just reaches in and changes it—which is a bit like performing open-heart surgery without the patient’s permission!

This is a subtle distinction, but it’s considered serious business to many programmers. To see why, suppose that there are many methods that won’t work at all on RNA sequences, so we must make sure that thesequenceinstance variable never has anyUcharacters in it. In this case, we could have the.set_seq()method decide whether or not to accept the sequence:

Python has anassertstatement for this sort of error checking. Like a function, it takes two parameters, but unlike a function, parentheses are not allowed.

When using an assert, if the check doesn’t evaluate toTrue, then the program will stop and report the specified error. The complete code for this example can be found in the file gene_class.py.

Using methods when working with objects is about encapsulation and letting the objects do as much work as possible. That way, they can ensure correct results so that you (or whomever you are sharing code with, which might be “future you”) don’t have to. Objects can have any number of instance variables, and the methods may access and modify them, but it’s a good idea to ensure that all instance variables are left in a coherent state for a given object. For example, if aGeneobject has an instance variable for the sequence, and another holding its GC content, then the GC content should be updated whenever the sequence is. Even better is to compute such quantities as needed, like we did above.[5]

The steps for writing a class definition are as follows:

  1. Decide what concept or entity the objects of that class will represent, as well as what data (instance variables) and methods (functions) they will have.
  2. Create a constructor method and have it initialize all of the instance variables, either with parameters passed into the constructor, or as empty (e.g., something likeself.id = ""orself.go_terms = list()). Although instance variables can be created by any method, having them all initialized in the constructor provides a quick visual reference to refer to when coding.
  3. Write methods that set or get the instance variables, compute calculations, call other methods or functions, and so on. Don’t forget theselfparameter!

Exercises

  1. Create a programobjects_test.pythat defines and uses a class. The class can be anything you want, but it should have at least two methods (other than the constructor) and at least two instance variables. One of the methods should be an “action” that you can ask an object of that class to perform, and the other should return an “answer.”

    Instantiate your class into at least two objects, and try your methods on them.

  2. Once defined, classes (and objects of those types) can be used anywhere, including other class definitions. Write two class definitions, one of which contains multiple instances of the other. For example, instance variables in aHouseobject could refer to several differentRoomobjects. (For a more biologically inspired example, aGeneobject could have aself.exonsthat contains a list ofExonobjects.)

    The example below illustrates this more thoroughly, but having some practice first will be beneficial.

  3. If classes implement some special methods, then we can compare objects of those types with==,<, and the other comparison operators.

    When comparing twoGeneobjects, for example, we might say that they are equal if their sequences are equal, andgeneAis less thangeneBifgeneA.seq < geneB.seq. Thus we can add a special method__eq__(), which, given the usualselfand a reference to another object of the same type calledother, returnsTrueif we’d consider the two equal andFalseotherwise:We can also implement an__lt__()method for “less than”:With these, Python can work out how to compareGeneobjects with<and==. The other comparisons can be enabled by defining__le__()(for<=),__gt__()(for>),__ge__()(for>=) and__ne__()(for!=).

    Finally, if we have a list ofGeneobjectsgenes_listwhich define these comparators, then Python can sort according to our comparison criteria withgenes_list.sort()andsorted(genes_list).

    Explore these concepts by defining your own ordered data type, implementing__eq__(),__lt__(), and the other comparison methods. Compare two objects of those types with the standard comparison operators, and sort a list of them. You might also try implementing a__repr__()method, which should return a string representing the object, enablingprint()(as inprint(geneA)).

Counting SNPs

As it turns out, multiple classes can be defined that interact with each other: instance variables of a custom class may refer to custom object types. Consider the file trio.subset.vcf, a VCF (variant call format) file for describing single-nucleotide polymorphisms (SNPs, pronounced “snips”) across individuals in a group or population. In this case, the file represents a random sampling of SNPs from three people—a mother, a father, and their daughter—compared to the reference human genome.[6]

This file contains a variety of information, including header lines starting with#describing some of the coding found in the file. Columns 1, 2, 3, 4, and 5 represent the chromosome number of the SNP, the SNP’s position on the chromosome, the ID of the SNP (if it has previously been described in human populations), the base present in the reference at that position, and an alternative base found in one of the three family members, respectively. Other columns describe various information; this file follows the “VCF 4.0” format, which is described in more detail at http://www.1000genomes.org/node/101. Some columns contain a.entry, which indicates that the information isn’t present; in the case of the ID column, these represent novel polymorphisms identified in this trio.

For this example, we are interested in the first five columns, and the main questions are:

  • How many transitions (A vs. G or C vs. T) are there within the data for each chromosome?
  • How many transversions (anything else) are there within the data for each chromosome?

We may in the future have other questions about transitions and transversions on a per-chromosome basis. To answer the questions above, and to prepare for future ones, we’ll start by defining some classes to represent these various entities. This example will prove to be a bit longer than others we’ve studied, partially because it allows us to illustrate answering multiple questions using the same codebase if we do some extra work up front, but also because object-oriented designs tend to result in significantly more code (a common criticism of using classes and objects).

SNP Class

A SNP object will hold relevant information about a single nonheader line in the VCF file. Instance variables would include the reference allele (a one-character string, e.g.,"A"), the alternative allele (a one-character string, e.g.,"G"), the name of the chromosome on which it exists (a string, e.g.,"1"), the reference position (an integer, e.g.,799739), and the ID of the SNP (e.g.,"rs57181708"or"."). Because we’ll be parsing lines one at a time, all of this information can be provided in the constructor.

SNP objects should be able to answer questions:.is_transition()should returnTrueif the SNP is a transition andFalseotherwise by looking at the two allele instance variables. Similarly,.is_transversion()should returnTrueif the SNP is a transversion andFalseotherwise.

Chromosome Class

AChromosomeobject will hold data for an individual chromosome, including the chromosome name (a string, e.g.,"1"), and all of the SNP objects that are located on that chromosome. We could store the SNP objects in a list, but we could also consider storing them in a dictionary, which maps SNP locations (integers) to the SNP objects. Then we can not only gain access to the list of SNPs (using the dictionary’s.values()method) or the list of locations (using the dictionary’s.keys()method), but also, given any location, we can get access to the SNP at that location. (We can even use.has_key()to determine whether a SNP exists at a given location.)

The chromosome constructor will initialize the name of the chromosome asself.chrname, but thesnpsdictionary will start as empty.

AChromosomeobject should be able to answer questions as well:.count_transitions()should tell us the number of transition SNPs, and.count_transversions()should return the number of transversion SNPs. We’re also going to need some way to add a SNP object to a chromosome’s SNP dictionary because it starts empty. We’ll accomplish this with an.add_snp()method, which will take all of the information for a SNP, create the new SNP object, and add it to the dictionary. If a SNP already exists at that location, an error should occur, because our program shouldn’t accept VCF files that have multiple rows with the same position for the same chromosome.

For overall strategy, once we have our classes defined (and debugged), the “executable” portion of our program will be fairly simple: we’ll need to keep a collection ofChromosomeobjects that we can interact with to add SNPs, and at the end we’ll just loop through these and ask each how many transitions and transversions it has. It makes sense to keep theseChromosomeobjects in a dictionary as well, with the keys being the chromosome names (strings) and the values being theChromosomeobjects. We’ll call this dictionarychrnames_to_chrs.

As we loop through each line of input (reading a file name given insys.argv[1]), we’ll split it apart and check whether the chromosome name is in the dictionary with.has_key(). If so, we’ll ask the object in that slot to add a SNP with.add_snp(). If not, then we’ll need to first create a newChromosomeobject, ask it to.add_snp(), and finally add it to the dictionary. Of course, all of this should happen only for nonheader lines.

We’ll start with the SNP class, and then theChromosomeclass. Although it is difficult to show here, it’s a good idea to work on and debug each method in turn (with occasionalprint()statements), starting with the constructors. Because a SNP is only a SNP if the reference and alternative allele differ, we’llassertthis condition in the constructor so an error is produced if we ever try to create a nonpolymorphic SNP (which wouldn’t actually be a SNP at all).

Note the shortcut that we took in the above code for the.is_transversion()method, which calls the.is_transition()method and returns the opposite answer. This sort of “shortcut” coding has its benefits and downsides. One benefit is that we can reuse methods rather than copying and pasting to produce many similar chunks of code, reducing the potential surface area for bugs to occur. A downside is that we have to be more careful—in this case, we’ve had to ensure that the alleles differ (via theassertin the constructor), so a SNP must be either a transition or transversion. (Is this actually true? What if someone were to attempt to create a SNP object with non-DNA characters? It’s always wise to consider ways code could be inadvertently misused.)

The above shows the start of the script and the SNP class; code like this could be tested with just a few lines:

Although we won’t ultimately leave these testing lines in, they provide a good sanity check for the code. If these checks were wrapped in a function that could be called whenever we make changes to the code, we would have what is known as a unit test, or a collection of code (often one or more functions), with the specific purpose of testing functionality of other code for correctness.[7] These can be especially useful as code changes over time.

Let’s continue on with theChromosomeclass. Note that the.add_snp()method contains assertions that the SNP location is not a duplicate and that the chromosome name for the new SNP matches the chromosome’sself.chrname.

Now we can write the methods for.count_transitions()and.count_transversions(). Because we’ve ensured that each SNP object is either a transition or a transversion, and no locations are duplicated within a chromosome, the.count_transversions()method can make direct use of the.count_transitions()method and the total number of SNPs stored vialen(self.locations_to_snps). (Alternatively, we could make acount_transversions()that operates similarly tocount_transitions()by looping over all the SNP objects.)

The corresponding test code is below. Here we are usingassertstatements, but we could also use lines likeprint(chr1.count_transitions())and ensure the output is as expected.

With the class definitions created and debugged, we can write the “executable” part of the program, concerned with parsing the input file (from a filename given insys.argv[1]) and printing the results. First, the portion of code that checks whether the user has given a file name (and produces some help text if not) and reads the data in. Again, we are storing a collection ofChromosomeobjects in achrnames_to_chrsdictionary. For each VCF line, we determine whether aChromosomewith that name already exists: if so, we ask that object to.add_snp(). If not, we create a newChromosomeobject, ask it to.add_snp(), and add it to the dictionary.

In thechr_obj = chrnames_to_chrs[chrname]line above, we are defining a variable referring to theChromosomeobject in the dictionary, and after that we are asking that object to add the SNP with.add_snp(). We could have combined these two with syntax likechrnames_to_chrs[chrname].add_snp().

Finally, a small block of code prints out the results by looping over the keys in the dictionary, accessing eachChromosomeobject and asking it the number of transitions and transversions:

We’ll have to remove or comment out the testing code (particularly the tests we expected to fail) to see the results. But once we do that, we can run the program (called snps_ex.py).

What we’ve created here is no small thing, with nearly 150 lines of code! And yet each piece of code is encapsulated in some way; even the long for-loop represents the code to parse the input file and populate thechrnames_to_chrsdictionary. By clearly naming our variables, methods, and classes we can quickly see what each entity does. We can reason about this program without too much difficulty at the highest level of abstraction but also delve down to understand each piece individually. As a benefit, we can easily reuse or adapt this code in a powerful way by adding or modifying methods.

An Extension: Searching for SNP-Dense Regions

Counting transitions and transversions on a per-chromosome basis for this VCF file could have been accomplished without defining classes and objects. But one of the advantages of spending some time organizing the code up front is that we can more easily answer related questions about the same data.

Suppose that, having determined the number of transitions and transversions per chromosome, we’re now interested in determining the most SNP-dense region of each chromosome. There are a number of ways we could define SNP density, but we’ll choose an easy one: given a region from positions l to m, the density is the number of SNPs occurring within l and m divided by the size of the region, m l + 1, times 1,000 (for SNPs per 1,000 base pairs).

For aChromosomeobject to be able to tell us the highest-density region, it will need to be able to compute the density for any given region by counting the SNPs in that region. We can start by adding to the chromosome class a method that computes the SNP density between two positions l and m.

After debugging this method and ensuring it works, we can write a method that finds the highest-density region. But how should we define our regions? Let’s say we want to consider regions of 100,000 bases. Then we might consider bases 1 to 100,000 to be a region, 100,001 to 200,000 to be a region, and so on, up until the start of the region considered is past the last SNP location. We can accomplish this with a while-loop. The strategy will be to keep information on the densest region found so far (including its density as well as start and end location), and update this answer as needed in the loop.[8]

In the above, we needed to access the position of the last SNP on the chromosome (so that the code could stop considering regions beyond the last SNP). Rather than write that code directly in the method, we decided that should be its own method, and marked it with a “todo” comment. So, we need to add this method as well:

In the code that prints the results, we can add the new call to.max_density(100000)for each chromosome, and print the relevant information.

Let’s call our new snps_ex_density.py (piping the result throughcolumn -tto more easily see the tab-separated column layout):

Again, none of the individual methods or sections of code are particularly long or complex, yet together they represent a rather sophisticated analysis program.

Summary

Perhaps you find these examples using classes and objects for problem solving to be elegant, or perhaps not. Some programmers think that this sort of organization results in overly verbose and complex code. It is certainly easy to get too ambitious with the idea of classes and objects. Creating custom classes for every little thing risks confusion and needless hassle. In the end, it is up to each programmer to decide what level of encapsulation is right for the project; for most people, good separation of concepts by using classes is an art form that requires practice.

When should you consider creating a class?

  • When you have many different types of data relating to the same concept, and you’d like to keep them organized into single objects as instance variables.
  • When you have many different functions related to the same concept, and you’d like to keep them organized into single objects as methods.
  • When you have a concept that is simple now, but you suspect might increase in complexity in the future as you add to it. Like functions, classes enable code to be reused, and it is easy to add new methods and instance variables to classes when needed.

Inheritance and Polymorphism

Despite this discussion of objects, there are some unique features of the object-oriented paradigm that we haven’t covered but are sometimes considered integral to the topic. In particular, most object-oriented languages (Python included) support inheritance and polymorphism for objects and classes.

Inheritance is the idea that some types of classes may be represented as special cases of other types of classes. Consider a class defining aSequence, which might have instance variables forself.seqandself.id. Sequences might be able to report their length, and so might have a.length_bp()method, returninglen(self.seq). There may also be many other operations a genericSequencecould support, like.get_id(). Now, suppose we wanted to implement anOpenReadingFrameclass; it too should have aself.idand aself.seqand be able to report its.length_bp(). Because an object of this type would represent an open reading frame, it probably should also have a.get_translation()method returning the amino-acid translation of itsself.seq. By using inheritance, we can define theOpenReadingFrameclass as a type ofSequenceclass, saving us from having to re-implement.length_bp()—we’d only need to implement the class-specific.get_translation()method and any other methods would be automatically inherited from theSequenceclass.

Polymorphism is the idea that inheriting class types don’t have to accept the default methods inherited, and they are free to re-implement (or “override”) specific methods even if their “parent” or “sibling” classes already define them. For example, we might consider another class calledAminoAcidSequencethat inherits fromSequence, so it too will have a.get_id()and.length_bp(); in this case, though, the inherited.length_bp()would be wrong, becauselen(self.seq)would be three times too short. So, anAminoAcidSequencecould override the.length_bp()method to return3*len(self.seq). The interesting feature of polymorphism is that given an object likegene_A, we don’t even need to know what “kind” ofSequenceobject it is: runninggene_A.length_bp()will return the right answer if it is any of these three kinds of sequence.

These ideas are considered by many to be the defining points of “object-oriented design,” and they allow programmers to structure their code in hierarchical ways (via inheritance) while allowing interesting patterns of flexibility (via polymorphism). We haven’t covered them in detail here, as making good use of them requires a fair amount of practice. Besides, the simple idea of encapsulating data and functions into objects provides quite a lot of benefit in itself!

Exercises

  1. Modify thesnps_ex_density.pyscript to output, for each 100,000bp region of each chromosome, the percentage of SNPs that are transitions and the number of SNPs in each window. The output should be a format that looks like so:
    In the section on R programming (chapter 37, “Plotting Data andggplot2”), we’ll discover easy ways to visualize this type of output.
  2. Therandommodule (used withimport random) allows us to make random choices; for example,random.random()returns a random float between0.0and1.0. Therandom.randint(a, b)function returns a random integer betweenaandb(inclusive); for example,random.randint(1, 4)could return1,2,3, or4. There’s also arandom.choice()function; given a list, it returns a single element (at random) from it. So, ifbases = ["A", "C", "T", "G"], thenrandom.choice(bases)will return a single string, either"A","C","T", or"G".

    Create a program calledpop_sim.py. In this program write aBugclass; a “bug” object will represent an individual organism with a genome, from which a fitness can be calculated. For example, ifa = Bug(), perhapsawill have aself.genomeas a list of 100 random DNA bases (e.g.["G", "T", "A", "G", ...; these should be created in the constructor). You should implement a.get_fitness()method which returns a float computed in some way fromself.genome, for example the number of G or C bases, plus 5 if the genome contains three"A"characters in a row. Bug objects should also have a.mutate_random_base()method, which causes a random element ofself.genometo be set to a random element from["A", "C", "G", "T"]. Finally, implement a.set_base()method, which sets a specific index in the genome to a specific base:a.set_base(3, "T")should setself.genome[3]to"T".

    Test your program by creating a list of 10Bugobjects, and in a for-loop, have each run its.mutate_random_base()method and print its new fitness.

  3. Next, create aPopulationclass. Population objects will have a list ofBugobjects (say, 50) calledself.bug_list.

    ThisPopulationclass should have a.create_offspring()method, which will: 1) create anew_poplist, 2) for each elementoldbugofself.bug_list: a) create a newBugobjectnewbug, b) and set the genome ofnewbug(one base at a time) to be the same as that ofoldbug, c) callnewbug.mutate_random_base(), and d) addoldbugandnewbugtonew_pop. Finally, this method should 3) setself.bug_poptonew_pop.

    ThePopulationclass will also have a.cull()method; this should reduceself.bug_popto the top 50% of bug objects by fitness. (You might find the exercise above discussing.__lt__()and similar methods useful, as they will allow you to sortself.bug_popby fitness if implemented properly.)

    Finally, implement a.get_mean_fitness()method, which should return the average fitness ofself.bug_pop.

    To test your code, instantiate ap = Population()object, and in a for-loop: 1) runp.create_offspring(), 2) runp.cull(), and 3) printp.get_mean_fitness(), allowing you to see the evolutionary progress of your simulation.

  4. Modify the simulation program above to explore its dynamics. You could consider adding a.get_best_individual()method to thePopulationclass, for example, or implement a “mating” scheme whereby offspring genomes are mixes of two parent genomes. You could also try tweaking the.get_fitness()method. This sort of simulation is known as a genetic algorithm, especially when the evolved individuals represent potential solutions to a computational problem.[9]


SCP Foundation



All anomalous objects, entities, and phenomena requiring Special Containment Procedures are assigned an Object Class. An Object Class is a part of the standard SCP template and serves as a rough indicator for how difficult an object is to contain. In universe, Object Classes are for the purposes of identifying containment needs, research priority, budgeting, and other considerations. An SCP's Object Class is determined by a number of factors, but the most important factors are the difficulty and the purpose of its containment.


MCQs Of Biology 1st Year Chapter Wise:

Online MCQs Bio with answers is arranged with chapter wise sequence, moreover, half book test, and full book test are also arranged. Separate sections for each chapter students will find. Just click on the chapter for which MCQs test you need. Biology part I book completes chapters. Every chapter completes with various helpful topics. The best way to prepare for the examination is not to leave even a single chapter or a single topic. If you feel burden then you are to inform that here we also offered other helping materials that may kill your burden. These helping materials comprised of 11th class biology past papers, students can find the old papers of the past 10 years. Biology online video lectures for 1st year, planned by the expert teachers also uploaded here to kill your study burden.


Linking errors on Scala 2.11 if an object is named class #3888

The following code works fine on Scala 2.12, but does not link on Scala 2.11:

The text was updated successfully, but these errors were encountered:

We are unable to convert the task to an issue at this time. Please try again.

The issue was successfully created but we are unable to update the comment at this time.

Sjrd commented Nov 28, 2019

  • Does it work if the object is in a package, not in an enclosing object? (ScalaFiddle always wraps its script in an object.)
  • Does it work in the JVM? With/without wrapping in an enclosing object.
  • Does it work in 1.x?

Atry commented Nov 28, 2019 •

  • JVM + Scala 2.11 - OK - https://scastie.scala-lang.org/CVfbzhAvTLSamyfW6G0gUA
  • Scala.js 0.6 + Scala 2.12 - OK - https://scalafiddle.io/sf/OarwKFw/0
  • Scala.js 0.6 + Scala 2.11 - error - https://scalafiddle.io/sf/LRfrjg0/0

I guess a top level object in a package should link but I have not tested yet.

Sjrd commented Nov 28, 2019

OK I can also reproduce this in Scala.js 1.x + Scala 2.11. And it does work on the JVM, somehow. However, I'm very tempted to mark this as won't fix, because there are other problems with the same root cause on the JVM with nested classes/objects named class . For example:

The implementation class of trait Foo is called Foo$class , and the class class is also called Foo$class , so they clash at the JVM level and cause LinkageError s like that NoSuchMethodError .

I think we should just consider that a nested class/trait/object called class is invalid as implementation restriction for Scala 2.11 as a whole (JVM or JS) and that we don't want to go great lengths to kind-of support the bits that Scala/JVM tolerates.


NCERT Solutions For Class 11 Biology Chapter 1 The Living World

Topics and Subtopics in NCERT Solutions for Class 11 Biology Chapter 1 The Living World:

Section Name Topic Name
1 The Living World
1.1 What is ‘Living’?
1.2 Diversity in the Living World
1.3 Taxonomic Categories
1.4 Taxonomical Aids
1.5 Summary

NCERT TEXTBOOK QUESTIONS SOLVED

1. Why are living organisms classified?
Soln. Living organisms are classified because of the following reasons:
(i) Easy identification.
(ii)Study of organisms of other places.
(iii)Study of fossils
(iv)Grouping helps in study of all types of organisms while it is impossible to study individually all of them.
(v) Itbringsoutsimilaritiesanddissimilarities. They help in knowing relationships among different groups.
(vi)Evolution of various taxa can be known.

2. Why are the classification systems changing every now and then?
Soln. From very early days till now biologists use several characters for classification system. These are morphology, anatomy, cytology, physiology, ontogeny, phylogeny, reproduction, biochemistry, etc. But day by day biologists are learning something new about organisms from their fossil records and using” advanced study techniques such as molecular phylogeny, etc. So their point of view about classification keeps changing. Thus the system of classification is modified every now and then.

More Resources for CBSE Class 11

3. What different criteria would you choose to classify people that you meet often?
Soln. The various criteria that may be chosen to classify people whom we meet often include behaviour, geographical location, morphology, family members, relatives, friends etc.

4. What do we learn from identification of individuals and populations?
Soln. The knowledge of characteristic of an individual or its whole population helps in identification of similarities and dissimilarities among the individuals of same kind or between different types of organisms. It helps us to classify the organisms in various categories depending upon these similarities and dissimilarities.

5. Given below is the scientific name of mango. Identify the correctly written name.
Mangifera Indica Mangifera indica
Soln. The correctly written scientific name of mango is Mangifera indica.

6. Define a taxon. Give some example of taxa at different hierarchical levels.
Slon. A taxonomic unit in the biological system of classification of organism is called taxon (plural taxa). For example a phylum, order, family, genus or species represents taxon. It represents a rank. For example, all the insects form a taxon. Taxon of class category for birds is Aves and taxon of Phylum category for birds is Chordata. The degree of relationship and degree of similarity varies with the rank of the taxon. Individuals of a higher rank, say Order or Family, are less closely related than those of a lower rank, such as Genus or Species.

7. Can you identify the correct sequence of taxonomical categories?
(a) Species —> Order —> Phylum —> Kingdom
(b) Genus—) Species—> OrderKingdom
(c) Species —> Genus —>Order —> Phylum
Slon. The correct sequence of taxonomical categories is
(c) i.e., Species —>Genus —> Order —> Phylum.

8. Try to collect all the currently accepted meanings for the word ‘species’. Discuss with your teacher the meaning of species in case of higher plants and animals on one hand, and bacteria on the other hand.
Slon. Species occupies a key position in classification. It is the lowest taxonomic category. It is a natural population of individuals or group of populations which resemble one another in all essential morphological and reproductive characters so that they are able to interbreed freely and produce fertile offsprings. Each species is also called genetically distinct and reproductively isolated natural population. Mayr (1964) has defined species as “a group of actually or potentially interbreeding populations that are reproductively isolated from other such groups”.
In higher plants and animals the term ‘species’ refers to a group of individuals that are able to interbreed freely and produce fertile offsprings. But, in case of bacteria interbreeding cannot serve as the best criteria for delimiting species because bacteria usually reproduce asexually. Conjugation, transformation and transduction, which are termed as sexual reproduction methods in bacteria, also do not correspond to true interbreeding. Thus, for bacteria many other characters such as molecular homology, biochemical, physiological, ecological and morphological characters are taken into consideration while classifying them.

9. Define and understand the following terms:
(i) Phylum (ii) Class (iii) Family
(iv) Order (v) Genus
Slon. (i) Phylum – Phylum is a category higher than that of Class. The term Phylum is used for animals. A Phylum is formed of one or more classes, e.g., the Phylum Chordata of animals contains not only the class Mammalia but also Aves (birds), Reptilia (reptiles), Amphibia (amphibians), etc. In plants the term Division is used in place of Phylum.
(ii) Class – A Class is made of one or more related Orders. For example, the Class Dicotyledoneae of flowering plants contains all dicots which are grouped into several orders (e.g., Rosales, Sapindales, Ranales, etc.).
(iii) Family, – It is a taxonomic category which contains one or more related genera. All the genera of a family have some common features or correlated characters. They are separable from genera of a related family by important and characteristic differences in both vegetative and reproductive features. E.g., the genera of cats (Fells) and leopard (Panthera) are included in the Family Felidae. The members of Family Felidae are quite distinct from those of Family Canidae (dogs, foxes, wolves).
Similarly, the family Solanaceae contains a number of genera like Solanum, Datura, Petunia and Nicotiana. They are distinguishable from the genera of the related family Convolvulaceae (Convolvulus, Ipomoea).
(iv) Order – The category includes one or more related families. E.g., the plant Family Solanaceae is placed in the Order Polemoniales alongwith four other related families (Convolvulaceae, Boraginaceae, Hydrophyllaceae and Polemoniaceae). Similarly, the animal families Felidae and Canidae are included under the Order Carnivora alongwith Hyaenidae (hyaenas) and Ursidae (bears).
(v) Genus – It is a group or assemblage of related species which resemble one another in certain correlated characters. Correlated characters are those similar or common features which are used in delimitation of a taxon above the rank of species. All the species of genus are presumed to have evolved from a common ancestor. A genus may have a single living species e.g., Genus Homo. Its species is Homo sapiens – the living or modem man. The Genus Felis has many species, e.g., F. domestica – common cat, F. chaus (jungle cat) etc.

lO.How is a key helpful in the identification and classification of an organism?
Slon. ‘Key is an artificial analytic device having a list of statements with dichotomic table of alternate characteristics. Taxonomic
keys are aids for rapid identification of unknown plants and animals based on
the similarities and dissimilarities. Keys are primarily based on stable and reliable characters. The keys are helpful in a faster preliminary identification which can bebacked up by confirmation through comparison with detailed description of the taxon provisionally identified with. Separate taxonomic keys are used for each taxonomic category like Family, Genus and Species.

11.Illustrate the taxonomical hierarchy with suitable examples of a plant and an animal.
Slon. The arrangement of various taxa in a hierarchical order is called taxonomic hierarchy. The hierarchy indicates the various levels of kinship. The number of similar characters of categories decreases from lowest rank to highest rank. The hierarchical system of classification was introduced by Linnaeus.
The hierarchy of major categories is:
Species —►Genus-►Family —► Order—► Class
Kingdom -4— Phylum or Division
Increasing specificity – ► Decreasing specificity
Classification of a plant (Wheat):
Kingdom – Plantae
Division – Angiospermae
Class – Monocotyledonae
Order – Poales
Family – Poaceae
Genus – Triticum
Species – aestivum
Classification of an animal (Housefly):
Kingdom – Animalia
Phylum – Chordata
Class – Insecta
Order – Diptera
Family – Muscidae
Genus – Musca
Species – domestica


As the last part of this section, let's now look into the source file declaration rules. These rules are essential when declaring classes, import statements and package statements in a source file.

There can be only one public class per source file.

A source file can have multiple non-public classes.

The public class name should be the name of the source file as well which should be appended by .java at the end. For example: the class name is public class Employee<> then the source file should be as Employee.java.

If the class is defined inside a package, then the package statement should be the first statement in the source file.

If import statements are present, then they must be written between the package statement and the class declaration. If there are no package statements, then the import statement should be the first line in the source file.

Import and package statements will imply to all the classes present in the source file. It is not possible to declare different import and/or package statements to different classes in the source file.

Classes have several access levels and there are different types of classes abstract classes, final classes, etc. We will be explaining about all these in the access modifiers chapter.

Apart from the above mentioned types of classes, Java also has some special classes called Inner classes and Anonymous classes.


The class as a distinct rank of biological classification having its own distinctive name (and not just called a top-level genus (genus summum)) was first introduced by the French botanist Joseph Pitton de Tournefort in his classification of plants that appeared in his Eléments de botanique, 1694.

Insofar as a general definition of a class is available, it has historically been conceived as embracing taxa that combine a distinct grade of organization -- i.e. a 'level of complexity', measured in terms of how differentiated their organ systems are into distinct regions or sub-organs -- with a distinct type of construction, which is to say a particular layout of organ systems. [1] This said, the composition of each class is ultimately determined by the subjective judgement of taxonomists. Often there is no exact agreement, with different taxonomists taking different positions. There are no objective rules for describing a class, but for well-known animals there is likely to be consensus.

In the first edition of his Systema Naturae (1735), [2] Carl Linnaeus divided all three of his kingdoms of Nature (minerals, plants, and animals) into classes. Only in the animal kingdom are Linnaeus's classes similar to the classes used today his classes and orders of plants were never intended to represent natural groups, but rather to provide a convenient "artificial key" according to his Systema Sexuale, largely based on the arrangement of flowers. In botany, classes are now rarely discussed. Since the first publication of the APG system in 1998, which proposed a taxonomy of the flowering plants up to the level of orders, many sources have preferred to treat ranks higher than orders as informal clades. Where formal ranks have been assigned, the ranks have been reduced to a very much lower level, e.g. class Equisitopsida for the land plants, with the major divisions within the class assigned to subclasses and superorders. [3]

The class was considered the highest level of the taxonomic hierarchy until George Cuvier's embranchements, first called Phyla by Ernst Haeckel, [4] were introduced in the early nineteenth century.

As with the other principal ranks, Classes can be grouped and subdivided. Here are some examples. [b]


2.11: Objects and Classes - Biology

Classes and Objects are basic concepts of Object Oriented Programming which revolve around the real life entities.

Class

  1. Modifiers: A class can be public or has default access (Refer this for details).
  2. class keyword: class keyword is used to create a class.
  3. Class name: The name should begin with an initial letter (capitalized by convention).
  4. Superclass(if any): The name of the class’s parent (superclass), if any, preceded by the keyword extends. A class can only extend (subclass) one parent.
  5. Interfaces(if any): A comma-separated list of interfaces implemented by the class, if any, preceded by the keyword implements. A class can implement more than one interface.
  6. Body: The class body surrounded by braces, < >.

Constructors are used for initializing new objects. Fields are variables that provides the state of the class and its objects, and methods are used to implement the behavior of the class and its objects.
There are various types of classes that are used in real time applications such as nested classes, anonymous classes, lambda expressions.

Object

  1. State: It is represented by attributes of an object. It also reflects the properties of an object.
  2. Behavior: It is represented by methods of an object. It also reflects the response of an object with other objects.
  3. Identity: It gives a unique name to an object and enables one object to interact with other objects.

Objects correspond to things found in the real world. For example, a graphics program may have objects such as “circle”, “square”, “menu”. An online shopping system might have objects such as “shopping cart”, “customer”, and “product”.

Declaring Objects (Also called instantiating a class)

When an object of a class is created, the class is said to be instantiated. All the instances share the attributes and the behavior of the class. But the values of those attributes, i.e. the state are unique for each object. A single class may have any number of instances.

As we declare variables like (type name). This notifies the compiler that we will use name to refer to data whose type is type. With a primitive variable, this declaration also reserves the proper amount of memory for the variable. So for reference variable, type must be strictly a concrete class name. In general, we can’t create objects of an abstract class or an interface.

If we declare reference variable(tuffy) like this, its value will be undetermined(null) until an object is actually created and assigned to it. Simply declaring a reference variable does not create an object.

Initializing an object

The new operator instantiates a class by allocating memory for a new object and returning a reference to that memory. The new operator also invokes the class constructor.

  • This class contains a single constructor. We can recognize a constructor because its declaration uses the same name as the class and it has no return type. The Java compiler differentiates the constructors based on the number and the type of the arguments. The constructor in the Dog class takes four arguments. The following statement provides “tuffy”,”papillon”,5,”white” as values for those arguments:
  • The result of executing this statement can be illustrated as :

Note : All classes have at least one constructor. If a class does not explicitly declare any, the Java compiler automatically provides a no-argument constructor, also called the default constructor. This default constructor calls the class parent’s no-argument constructor (as it contain only one statement i.e super()), or the Object class constructor if the class has no other parent (as Object class is parent of all classes either directly or indirectly).

Ways to create object of a class

  • Using new keyword: It is the most common and general way to create object in java. Example:
  • Using Class.forName(String className) method: There is a pre-defined class in java.lang package with name Class. The forName(String className) method returns the Class object associated with the class with the given string name.We have to give the fully qualified name for a class. On calling new Instance() method on this Class object returns new instance of the class with the given string name.
  • Using clone() method: clone() method is present in Object class. It creates and returns a copy of the object.
  • Deserialization: De-serialization is technique of reading an object from the saved state in a file. Refer Serialization/De-Serialization in java

Creating multiple objects by one type only (A good practice)

  • In real-time, we need different objects of a class in different methods. Creating a number of references for storing them is not a good practice and therefore we declare a static reference variable and use it whenever required. In this case, wastage of memory is less. The objects that are not referenced anymore will be destroyed by Garbage Collector of java. Example:
  • In inheritance system, we use parent class reference variable to store a sub-class object. In this case, we can switch into different subclass objects using same referenced variable. Example:

Anonymous objects

  • They are used for immediate method calling.
  • They will be destroyed after method calling.
  • They are widely used in different libraries. For example, in AWT libraries, they are used to perform some action on capturing an event(eg a key press).
  • In the example below, when a key is button(referred by the btn) is pressed, we are simply creating anonymous object of EventHandler class for just calling handle method.

This article is contributed by Gaurav Miglani. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to [email protected] See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Attention reader! Don&rsquot stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.


Watch the video: Σχέση μεταξύ απόστασης αντικειμένου, ειδώλου και εστιακής απόστασης απόδειξη (June 2022).


Comments:

  1. Ragnar

    Tired of the critical days - change sex !!!!! Figure caption: “Ass. Front view ”Seven nannies have ... fourteen boobs No matter how much vodka you take, you still run twice! (wisdom). He put on a slight fright. Drink seven times - drink once! The place of the enema cannot be changed. Girls lack femininity, and women lack virginity. Sculptural group: Hercules tearing the mouth of a peeing boy. Badge on a 150-kilogram man: Progress made sockets inaccessible to most children - the most gifted die.

  2. Hewett

    I confirm. It was with me too. Let's discuss this issue.

  3. Kerisar

    thanks

  4. Ron

    I apologize, this variant does not come my way. Can the variants still exist?



Write a message